I remember a program that you could type in your phone number and it would
give you all permutations of what possible words could be formed.

I just wanted to see how easy it was. Well... I'm really stumped on the
logic.

Hi Andy,


I begin with these presumptions:

1. We are dealing with 7-digit numbers: no area code.

2. One has a list of all "legal" words up to seven characters in length in an array variable, myDictionary. So that myDictionary[1] contains all single-character words, myDictionary[2] contains all two-character words, etc.

3. One has a valid phone number in theNumber

4. All words are the same length: one can't put blanks in places where there are characters.

local validWords

function goodWord thisWord
  return (offset(thisWord,validWords)<>0)
end goodWord

function phoneWords theNumber
  put empty into characterList
  put 0 into characterCount
  repeat for each char theDigit in theNumber
    switch theDigit
      case "2"
        put "ABC" into theCharacters
      break
      case "3"
        put "DEF" into theCharacters
      break
      case "4"
        put "GHI" into theCharacters
      break
      case "5"
        put "JKL" into theCharacters
      break
      case "6"
        put "MNO" into theCharacters
      break
      case "7"
        put "PQRS" into theCharacters
      break
      case "8"
        put "TUV" into theCharacters
      break
      case "9"
        put "WXYZ" into theCharacters
      break
      default
        next repeat
    end switch
    add 1 to characterCount
    put theCharacters into characterList[characterCount]
  end repeat
  put myDictionary[characterCount] into validWords
  put empty into wordList
  put empty into thisWord
  repeat for each char myCharacter1 in characterList[1]
    put myCharacter1 into char 1 of thisWord
    if characterCount is 1 then
      if goodWord(thisWord) then put thisWord&return after wordList
      next repeat
    end if
    repeat for each char myCharacter2 in characterList[2]
      put myCharacter2 into char 2 of thisWord
      if characterCount is 2 then
        if goodWord(thisWord) then put thisWord&return after wordList
        next repeat
      end if
      repeat for each char myCharacter3 in characterList[3]
        put myCharacter3 into char 3 of thisWord
        if characterCount is 3 then
          if goodWord(thisWord) then put thisWord&return after wordList
          next repeat
        end if
        repeat for each char myCharacter4 in characterList[4]
          put myCharacter4 into char 4 of thisWord
          if characterCount is 4 then
            if goodWord(thisWord) then put thisWord&return after wordList
            next repeat
          end if
          repeat for each char myCharacter5 in characterList[5]
            put myCharacter5 into char 5 of thisWord
            if characterCount is 5 then
              if goodWord(thisWord) then put thisWord&return after wordList
              next repeat
            end if
            repeat for each char myCharacter6 in characterList[6]
              put myCharacter6 into char 6 of thisWord
              if characterCount is 6 then
                if goodWord(thisWord) then put thisWord&return after wordList
                next repeat
              end if
              repeat for each char myCharacter7 in characterList[7]
                put myCharacter7 into char 7 of thisWord
                if goodWord(thisWord) then put thisWord&return after wordList
               end repeat
             end repeat
           end repeat
         end repeat
       end repeat
    end repeat
  end repeat
  return wordList
end phoneWords

The nested repeats could be a candidate for recursion, but that's not my strong suit. This should be easier to understand anyway. :{`)
--


Rob Cozens
CCW, Serendipity Software Company
http://www.oenolog.net/who.htm

"And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee."

from "The Triple Foole" by John Donne (1572-1631)
_______________________________________________
use-revolution mailing list
[EMAIL PROTECTED]
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to