cop的答案可以通过从Haystack程序中删除任何字符子集来破解,这样它就可以输出Needle
而不是Haystack
(同时仍然是同一语言中的有效提交)。只要您的解决方案符合上述约束条件,您就不必找到与cop所期望的完全相同的解决方案。
如果你能做到这一点,就把答案与解决方案联系起来,链接到缔约方会议的答案,并对缔约方会议的答复留下评论,链接回你的答案。
警察回答最多的抢劫犯赢了。领带被破解的警察回答的大小之和打破(有利于强盗谁破解更长的提交)。
每个警察的答案只能破解一次,当然,你也不允许自己破解答案。如果警察的回答在被破解之前或之后都是无效的,则不计入强盗的分数。
以下是几种不同语言的简单示例:
Ruby
Haystack: puts 1>0?"Haystack":"Needle"
Delete: XXXXXXXXXXXXXXX
Needle: puts "Needle"
Python 2
Haystack: print "kcatsyaHeldeeN"[-7::-1]
Delete: XXXXXXXX XX
Needle: print "eldeeN"[::-1]
注意,移除字符的子集不一定是连续的。
发布于 2017-10-07 19:15:15
裂纹阿纳尔德的回答
f=(k=b=x=35)=>x--?f(k*4853461&268435455):k&2?'N'+(k^12408877).toString(b):'Haystack'
f=(k=b=x=35)=>x--?f(k*4853461&268435455):k&2?'N'+(k^12408877).toString(b):'Haystack'
console.log(f())
最初的职能是:
f=(k=b=x=35)=>x--?f(k*74837258394056219&268435455):k&2?'N'+(k^124038877).toString(b):'Haystack'
其可读性更强,如:
f = (k=b=x=35) => {
if (x--) {
return f(k*74837258394056219&268435455);
} else {
if (k&2) {
return 'N'+(k^124038877).toString(b);
} else {
return 'Haystack';
}
}
}
注意,当n=21625674
时,n.toString(35)
就是'eedle'
。
输入中的35可能不能被更改为子集(因为我们需要一个足够大的基来包含所有的字母'del',所以我们需要一个至少22的基。因此,要更改的数字是74837258394056219
、268435455
和124038877
。我们想用数字a,b,c替换它们,每个数字由原始数字的一个子集组成,这样函数g(k) = (k * a & b)
,从k=35
开始,迭代35次,然后XORed用c,给出21625674
。
对于这个问题,考虑一下后,由于长度很小(最大a
的长度为17,b
和c
的长度为9),我刚刚使用了蛮力:-)编写了一个C++程序来生成作为原始数字子集的所有可能的数字a
、b
、c
,遍历所有a
和b
,并检查所需的c
是否在集合中。运行时间约为15秒,唯一的输出是a=4853461
、b=268435455
、c=12408877
(原来不需要更改数字b
)。我不确定是否有一种更聪明的方法来反演这个函数。
发布于 2017-10-07 16:27:03
发布于 2017-10-09 11:32:24
裂纹阿加托弗的回答
import numpy
print "".join([dir(numpy)[int(i)][0] for i in numpy.poly1d([-143/2e1,-31,14,131,61,184])(numpy.arange(-3,3))])
比较:
print "".join([dir(numpy)[int(i)][1-0] for i in numpy.poly1d([-1*1433/252e1,-3232/1920.,4026./72/2/3.,613/(6*4.)*1,-4723./1.8e2,-9763/120.,-2689/(-1+5*17.),1+138*.4*2])(numpy.arange(-12/3,13%9))])
print "".join([dir(numpy)[int(i)][ 0] for i in numpy.poly1d([-1 43 /2 e1,-3 1 , 1 4 , 1 3 1 , 6 1 ,1 8 4 ])(numpy.arange(- 3, 3 ))])
我找到了很多有趣的解决方案,通过将多项式拟合到以Meedle
中的每个字母开头的numpy符号的索引的中位数,从而打印出Needle
和Needlf
。然后,我试图用手工找到与原始程序子集相似的系数,但最后不得不用蛮力强迫一个人找到一个有效的解决方案。
https://codegolf.stackexchange.com/questions/144601
复制相似问题