该系统主要是记忆用于转换数字成单词,这样他们可以更容易地存储设备。
它基于单词的语音发音方式,但是为了使问题简单易懂,我们只关心单词的拼写方式。这意味着会有一些不正确的转换,但是没关系。
使用简化的主系统将数字转换成单词:
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
,在任意位置添加字母以构成一个真实的英语单词。唯一的例外是,不得在或之后插入。
h
s
c
该数字实际上可以是数字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。