Skip to content

Instantly share code, notes, and snippets.

@olabini
Created July 26, 2011 16:13
Show Gist options
  • Save olabini/1107137 to your computer and use it in GitHub Desktop.
Save olabini/1107137 to your computer and use it in GitHub Desktop.
Phone number coding program in Ioke
List splitAt = method(n, [self[0...n], self[n..-1]])
PhoneNumbers = Origin mimic do(
words = FileSystem readFully("/usr/share/dict/words") split("\n")
mnemonics = {
2 => "ABC",
3 => "DEF",
4 => "GHI",
5 => "JKL",
6 => "MNO",
7 => "PQRS",
8 => "TUV",
9 => "WXYZ"
}
charCode = for:dict(
(digit, letters) <- mnemonics,
letter <- letters chars,
letter => digit
)
wordCode = method(word,
word upper chars map(c, charCode[c])
)
wordsForNum = words select(length <= 7) groupBy(word, wordCode(word)) withDefault([])
encode = method(number,
number = number chars map(toRational)
(1...(number length)) map(splitPoint,
(firstWords, lastWords) = number splitAt(splitPoint) map(w, wordsForNum[w])
for:set(
firstWord <- firstWords,
lastWord <- lastWords,
"#{firstWord} #{lastWord}") || #{}
) reduce(+) + set(*wordsForNum[number])
)
)
PhoneNumbers encode("6327537") inspect println
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment