[Char = String] CH2NUM L(chars) ‘abc def ghi jkl mno pqrs tuv wxyz’.split(‘ ’) V num = L.index + 2 L(ch) chars CH2NUM[ch] = String(num) F mapnum2words(words) DefaultDict[String, [String]] number2words V reject = 0 L(word) words X.try number2words[word.map(ch -> :CH2NUM[ch]).join(‘’)].append(word) X.catch KeyError reject++ R (number2words, reject) V words = File(‘unixdict.txt’).read().rtrim("\n").split("\n") print(‘Read #. words from 'unixdict.txt'’.format(words.len)) V wordset = Set(words) V (num2words, reject) = mapnum2words(words) F interactiveconversions() L(inp) (‘rosetta’, ‘code’, ‘2468’, ‘3579’) print("\nType a number or a word to get the translation and textonyms: "inp) I all(inp.map(ch -> ch C ‘23456789’)) I inp C :num2words print(‘ Number #. has the following textonyms in the dictionary: #.’.format(inp, (:num2words[inp]).join(‘, ’))) E print(‘ Number #. has no textonyms in the dictionary.’.format(inp)) E I all(inp.map(ch -> ch C :CH2NUM)) V num = inp.map(ch -> :CH2NUM[ch]).join(‘’) print(‘ Word #. is#. in the dictionary and is number #. with textonyms: #.’.format(inp, (I inp C :wordset {‘’} E ‘n't’), num, (:num2words[num]).join(‘, ’))) E print(‘ I don't understand '#.'’.format(inp)) V morethan1word = sum(num2words.keys().filter(w -> :num2words[w].len > 1).map(w -> 1)) V maxwordpernum = max(num2words.values().map(values -> values.len)) print(‘ There are #. words in #. which can be represented by the Textonyms mapping. They require #. digit combinations to represent them. #. digit combinations represent Textonyms.’.format(words.len - reject, ‘'unixdict.txt'’, num2words.len, morethan1word)) print("\nThe numbers mapping to the most words map to #. words each:".format(maxwordpernum)) V maxwpn = sorted(num2words.filter((key, val) -> val.len == :maxwordpernum)) L(num, wrds) maxwpn print(‘ #. maps to: #.’.format(num, wrds.join(‘, ’))) interactiveconversions()