用于标准numpad上的非零位数。
789
456
123考虑将一个国际象棋骑士放在任何数字上,然后用任意数量的L形状的跳跃移动它,跟踪一个正数的十进制整数。什么样的正整数可以用这样的方式表达?
其中之一是38,因为骑士可以从3开始,然后向左移动到8。381和383也是可能的。
如果不采取跳转(这是允许的),3本身是可能的。5也是,但是不能从5到达其他数字,因此它是数字5出现的唯一数字。
编写一个程序或函数,该程序或函数接受正十进制整数(如果需要,可以将其作为字符串),如果数字可以由数字上的骑士以描述的方式表示,则打印或返回特鲁西值,但否则输出虚妄值。
特鲁西:
1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 18, 38, 61, 81, 294, 349, 381, 383, 729, 767, 38183, 38383, 18349276, 183492761, 618349276法尔西:
10, 11, 50, 53, 55, 65, 95, 100, 180, 182, 184, 185, 186, 187, 188, 189, 209, 305, 2009, 5030, 3838384, 4838383, 183492760发布于 2016-04-18 21:49:08
f=lambda n:n<6or`n%100`in'18349276167294381'*f(n/10)检查字符串'18349276167294381'中是否有两个连续的数字。为了获得连续的数字,而不是执行zip(`n`,`n`[1:]),函数重复检查最后两个数字并删除最后一个数字。
发布于 2016-04-18 20:05:07
匿名函数。参数是字符串。
->n{(0..n.size).count{|i|!"16729438183492761"[n[i,2]]}<1}带有测试套件的程序:
f=->n{(0..n.size).count{|i|!"16729438183492761"[n[i,2]]}<1}
a=%w{1 2 3 4 5 6 7 8 9 16 18 38 61 81 294 349 381 383 729 767 38183 38383 18349276 183492761 618349276
10 11 50 53 55 65 95 100 180 182 184 185 186 187 188 189 209 305 2009 5030 3838384 4838383 183492760}
a.each {|e|p [e, f[e]]}我只是编码了所有可能的骑士移动到一个字符串,并检查输入中的每2位数字是否存在于该字符串中。
发布于 2016-04-18 20:24:17
grep "^((?=18|16|29|27|34|38|49|43|61|67|72|76|81|83|94|92).)*.$"因为如果你不能打败grep..。
https://codegolf.stackexchange.com/questions/78024
复制相似问题