您正在制作一个新的手机,人们可以在其中输入专门的电话号码,例如1-800-program
,然后将它们自动转换为可用的电话号码,比如1-800-7764726
(对于前面的示例)。
您的程序将接收一个字符串,如果有任何长度的数字,字母和破折号,并将所有的字母转换成相应的数字。
这里有一个键盘,供参考:
发布于 2014-02-20 02:17:45
{.96>{,91,'qx'+-,3/`}*}%
测试输入:
0123456789-abcdefghijklmnopqrstuvwxyz
测试输出:
0123456789-22233344455566677778889999
解释:
{ }%
将大括号之间的代码应用于输入的每个字符。.96>{ }*
执行内部大括号之间的代码当且仅当字符的ASCII代码大于96 (即它是小写字母)。,
将字符转换为所有字符的列表,其中所有字符的ASCII代码较低,而91,'qx'+-
从列表中筛选出所有代码小于91的字符,以及字母q
和x
。因此,例如,字符a
被转换为6个字符列表[\]^_`
,而z
被转换为29个字符列表[\]^_`abcdefghijklmnoprstuvwy
。,
计算列表中剩下的元素,3/
将这个计数除以三个(四舍五入)。最后,`
将结果数字(在2-9范围内)转换为字符串。因此,按照规范,连字符和数字保持不变,而小写字母则根据参考键盘图映射为数字。代码实际上将干净地传递所有可打印的ASCII字符,除了小写字母(正如所描述的那样映射)和字符{
、|
和}
(它们映射到两个字符的字符串10
)。非ASCII 8位输入将产生各种奇怪的数字输出.
在所有这些之后,这只比平凡bash解只差了六个字符,这有点令人失望。
发布于 2014-02-19 00:08:15
编辑:谢谢你的门把手消除了3个字符。
tr a-z 22233344455566677778889
示例:
发布于 2014-02-19 00:37:26
alert(prompt().replace(/[a-z]/g,function(y){y=y.charCodeAt(0)-91;return y>27?9:y>24?8:y>20?7:~~(y/3)}))
https://codegolf.stackexchange.com/questions/21327
复制相似问题