factorableWords.frink

View or download factorableWords.frink in plain text format


/** This finds words expressed in base 36 that are factorable into other words.     Yeah, I know, it's silly. */

words = "file:///home/eliasen/prog/mobydict/scrabble/sowpods.txt"

wordList = select[lc[lines[words]], %r/^[a-z]*$/i]
wordSet = toSet[wordList]

for word = wordList
{
   if (length[result = factorWord[word, wordSet]] != 0)
      println["$word\t$result"]
}

/** This function sets up the recursive call.   All results will be put in the
    set. */

factorWord[word, wordSet] :=
{
   return factorWord[word, wordSet, new set]
}

/** This is the actual recursive call.  Results will be returned in the return
    value, which is the set called result. */

factorWord[word, wordSet, result] :=
{
   num = parseInt[word, 36]
   factors = allFactors[num, false, false, false]
   for factor = factors
      if wordSet.contains[factor -> base36]
      {
         other = (num/factor -> base36)
         if (wordSet.contains[other])
            result.put[other]
         else
            factorWord[other, wordSet, result]
       }

   return result
}


View or download factorableWords.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18233 days, 20 hours, 22 minutes ago.