Implement t9-like functionality
CJam, 28 bytes
q~{el{'h-_9/-D+3/}%s1$#!},p;

Takes input in the form of &quot;&lt;number&gt;&quot; [&lt;list of words&gt;]
Example:
&quot;52726&quot; [&quot;Japan&quot; &quot;japan&quot; &quot;Japanee&quot; &quot;Japanese&quot; &quot;Japanesque&quot; &quot;larbowlines&quot; &quot;ablution&quot; &quot;ablutionary&quot; &quot;abluvion&quot; &quot;ably&quot; &quot;abmho&quot; &quot;Abnaki&quot; &quot;abnegate&quot;]

Output:
[&quot;Japan&quot; &quot;japan&quot; &quot;Japanee&quot; &quot;Japanese&quot; &quot;Japanesque&quot; &quot;larbowlines&quot;]

Not going for any bonus for now.
Try the code online here but for actual time measurements, run it on the Java compiler
Note that CJam represents empty lists like &quot;&quot;
To convert the raw wordlist into CJam list use the following code with the wordlist as input:
qN/p