挑战
一个简单的“间谍与间谍”挑战。
编写具有以下规范的程序:
- 该程序可以用任何语言编写,但不得超过512个字符(如本网站的代码块所示)。
- 该程序必须接受5个带符号的32位整数作为输入。它可以采用接受5个参数的函数,接受单个5元素数组的函数或从任何标准输入中读取5个整数的完整程序的形式。
- 程序必须输出一个带符号的32位整数。
- 当且仅当五个输入(被解释为一个序列)与程序员选择的特定算术序列(称为“键”)匹配时,程序才必须返回1。对于所有其他输入,该函数必须返回0。
算术序列具有以下特性:该序列的每个连续元素都等于其前任元素加上某个固定常数a
。
例如,25 30 35 40 45
是算术序列,因为序列中的每个元素都等于其前任加5。同样,17 10 3 -4 -11
是算术序列,因为序列中的每个元素都等于其前任加-7。
序列1 2 4 8 16
和3 9 15 6 12
不是算术序列。
密钥可以是您选择的任何算术序列,唯一的限制是不允许涉及整数溢出的序列。也就是说,序列必须严格增加,严格减少或所有元素相等。
例如,假设您选择键98021 93880 89739 85598 81457
。如果输入(按顺序)与这五个数字匹配,则程序必须返回1,否则返回0。
请注意,保护钥匙的方法应该是您自己新颖的设计。同样,不允许以任何非零概率返回假阳性的概率解。特别是,请勿使用任何标准密码哈希,包括用于标准密码哈希的库函数。
计分
每个字符计数中最短的未破解提交将被宣布为获胜者。
如果有任何混淆,请随时提出或评论。
反挑战
鼓励所有读者,包括提交了自己程序的读者,“破解”提交的内容。当提交的密钥发布在关联的注释部分时,该提交将被破解。如果提交的内容持续存在72小时而不被修改或破解,则被认为是“安全的”,随后在破解方面的任何成功都将被视为比赛的原因。
有关更新的破解分数政策的详细信息,请参见下面的“免责声明”。
破解的提交将被排除在争用之外(前提是它们“不安全”)。不应对其进行编辑。如果读者希望提交新程序,则应在单独的答案中提交。
得分最高的饼干将与获奖程序的开发者一起宣布为获奖者。
请不要破解您自己的提交。
祝你好运。:)
排行榜
倒数第二的排名(在丹尼斯提交的CJam 49提交文件中处于安全状态)。
安全储物柜
- 丹尼斯CJam 49
- CJam 62,丹尼斯 保险柜
- CJam 91,丹尼斯 保险柜
- Python 156,Maarten Baert 安全
- Perl 256, 安全的
- Java 468,Geobits 安全
不可阻挡的饼干
- 彼得·泰勒 [Ruby 130,Java 342,Mathematica 146 *,Mathematica 72 *,CJam 37]
- 丹尼斯[Pyth 13,Python 86 *,Lua 105 *,GolfScript 116,C 239 *]
- MartinBüttner[Javascript 125,Python 128 *,Ruby 175 *,Ruby 249 *]
- Tyilo [C 459,Javascript 958 *]
- freddieknets [Mathematica 67 *]
- Ilmari Karonen [Python27 182 *]
- 亚硝酸盐[C 212 *]
*不符合规定的提交
免责声明(8月26日,美国东部标准时间11:15更新)
随着计分问题最终达到临界质量(到目前为止,三分之二的不合格提交都是不合规的),我已经按照破解的提交数量(主要)和合规的不合格提交中的字符总数来排名最高的饼干(第二)。
像以前一样,已破解的确切提交内容,提交的时间长度以及它们的合规/不合规状态均已标记,以便读者如果认为新的官方排名不公平,则可以推断自己的排名。
我很抱歉在比赛后期修改规则。