sequence digit = repeat(-1,255) digit['a'..'c'] = '2' digit['d'..'f'] = '3' digit['g'..'i'] = '4' digit['j'..'l'] = '5' digit['m'..'o'] = '6' digit['p'..'s'] = '7' digit['t'..'v'] = '8' digit['w'..'z'] = '9' function digits(string word) for i=1 to length(word) do integer ch = word[i] if ch<'a' or ch>'z' then return "" end if word[i] = digit[ch] end for return word end function sequence words = {}, last="" object word, keycode integer keycode_count = 0, textonyms = 0, this_count = 0, max_count = 0, max_idx integer fn = open("demo\\unixdict.txt","r") while 1 do word = trim(gets(fn)) if atom(word) then exit end if keycode = digits(word) if length(keycode) then words = append(words, {keycode, word}) end if end while close(fn) printf(1,"There are %d words in unixdict.txt which can be represented by the digit key mapping.\n",{length(words)}) words = sort(words) for i=1 to length(words) do {keycode,word} = words[i] if keycode=last then textonyms += this_count=1 this_count += 1 if this_count>max_count then max_count = this_count max_idx = i end if else keycode_count += 1 last = keycode this_count = 1 end if end for printf(1,"They require %d digit combinations to represent them.\n",{keycode_count}) printf(1,"%d digit combinations represent Textonyms.\n",{textonyms}) sequence dups = {} for i=max_idx-max_count+1 to max_idx do dups = append(dups,words[i][2]) end for printf(1,"The maximum number of textonyms for a particular digit key mapping is %d:\n",{max_count}) printf(1," %s encodes %s\n",{words[max_idx][1],join(dups,"/")})