该系统主要是记忆用于转换数字成单词,这样他们可以更容易地存储设备。
它基于单词的语音发音方式,但是为了使问题简单易懂,我们只关心单词的拼写方式。这意味着会有一些不正确的转换,但是没关系。
使用简化的主系统将数字转换成单词:
0用s或替换每个z。(有些可能是s,有些可能是z。下同。)1用t或d或替换它们th。- 替换每个
2有n。- 替换每个
3有m。- 替换每个
4有r。- 替换每个
5有l。6用j或sh或替换它们ch。- 替换每个
7用k或c或g或q。8用f或替换每个v。9用p或替换每个b。- 如有可能
aehiouwxy,在任意位置添加字母以构成一个真实的英语单词。唯一的例外是,不得在或之后插入。
hsc该数字实际上可以是数字0-9的任何字符串(无小数,逗号或符号)。
该单词只能包含小写字母az。
例子
该数字32必须转换为?m?n?,其中?代表由字母组成的任何有限字符串aehiouwxy(如果愿意,则是来自免费monoid的字符串)。有许多方法,这可能做成一个真正的英文单词:mane,moon,yeoman等。
该数字05可以转换为?s?l?或?z?l?。一些可能的是easily,hassle和hazel。这个词shawl是不允许的,因为h可能不能放在之后s; 它会被错误地读取为65。
挑战
编写一个程序或函数,该程序或函数使用数字0-9的字符串,并找到所有可以使用简化的主系统助记符将其转换成的单词。
您的程序可以访问单词列表文本文件,该文件定义了所有“真实”英语单词是什么。此文件的每一行上都有一个小写的az字,您可以选择假定它有一个尾随的换行符。这是可用于测试的真实单词列表。您可以假设这个单词列表文件被称为f(或更长的名称)并且位于任何方便的目录中。
对于35字节的罚款(将您的分数加35),您可以假设单词列表已作为字符串列表加载到变量中。这主要用于无法读取文件的语言,但是任何提交都可以利用它。
您的程序必须输出所有单词列表中可以转换输入数字的单词。应该将它们打印到stdout(或类似格式),每行打印一次(带有可选的尾随换行符),或者如果您选择编写函数,则可以将它们作为字符串列表返回。单词列表不一定按字母顺序排列,输出也不需要。
如果没有可能的单词,则输出(或列表)将为空。如果输入空字符串,则输出也为空。
通过标准输入,命令行或函数的字符串参数获取输入。单词列表或其文件名不应是输入的一部分,而应是数字字符串。
您只匹配单词列表中的单个单词,而不匹配单词序列。该单词noon可能是的结果之一22,但单词序列no one不是。
测试用例
假设这是单词列表:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
zdnmrlshchvb
sthnmrlchgvb
shthnmrlchgvb
bob
pop
bop
bopy
boppy
输入0123456789应给出除zdnmrlshchvb和以外的所有长词shthnmrlchgvb:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
sthnmrlchgvb
输入99应给出:
bob
pop
bop
bopy
(输出字可以按任何顺序排列。)
计分
以字节为单位的最短提交获胜。Tiebreaker转到第一个发布的提交。
漂亮的相关网站:numzi.com。