7
两对多输出
挑战 我向您介绍了另一种间谍对抗间谍挑战,点刺混淆器与饼干。但是,在这种情况下,要保护的数据不是输入而是输出。 挑战的规则很简单。编写具有以下规范的例程: 该例程可以用任何语言编写,但不能超过320个字节。 该例程必须接受三个32位带符号整数作为输入。它可以采用接受3个参数的函数,接受单个3元素数组的函数或从任何标准输入读取3个整数的完整程序的形式。 该例程必须输出一个带符号的32位整数。 在所有可能的输入中,例程必须输出2到1000(含)之间的唯一值。例程可以输出的唯一值的数量称为其键。 例如,C程序 int foo( int i1, int i2, int i3 ) { return 20 + (i1^i2^i3) %5; } 具有9的关键,因为它(希望)只能输出的九个值16,17,18,19,20,21,22,23,和24。 其他一些限制如下: 该例程必须是完全确定性的并且是时不变的,对于相同的输入返回相同的输出。该例程不应调用伪随机数生成器。 该例程可能不依赖于“隐藏变量”,例如文件中的数据,系统变量或深奥的语言功能。例如,例程通常不应引用常量,除非常量在代码本身中明确定义。强烈建议不要使用依赖于编译器怪癖的例程,数学上未定义的操作的输出,算术错误等。如有疑问,请询问。 您(编码人员)必须精确知道例程可以产生多少个唯一输出,并且应该能够提供至少一个产生每个输出的输入序列。(由于可能有成百上千的唯一输出,因此只有在您的密钥被争用的情况下才需要此集合。) 由于此问题与经典加密几乎没有相似之处,因此,我希望它将为更多的读者所熟悉。 越有创意,就越好。 计分 每字节计数最短的未破解提交将被宣布为获胜者。 如果有任何混淆,请随时提出或评论。 反挑战 鼓励所有读者,包括那些已提交自己例程的读者,“破解”提交的内容。当提交的密钥发布在关联的注释部分中时,该提交将被破解。如果提交的内容持续存在72小时而不被修改或破解,则被认为是“安全的”,随后在破解方面的任何成功都将被视为比赛的原因。 每个读者每次提交只能进行一次破解尝试。例如,如果我向用户X提交:“您的密钥是20”,但我错了,用户X将拒绝我的猜测为错误,并且我将不再能够为该提交提交其他猜测。 破解的提交将被排除在争用之外(前提是它们不安全)。不应对其进行编辑。如果读者希望提交新的例程,则应在单独的答案中提交。 破解者的分数是破解者提交的内容(符合或不符合)的数量。对于计数相同的饼干,排名由所有破解提交中的总字节数决定(越高越好)。 得分最高的饼干将与获胜常规的开发者一起宣布为获胜者。 请不要破解您自己的提交。 祝你好运。:) 排行榜 上次更新时间:9月2日,美国东部标准时间上午10:45 不可逾越的壁垒(非破解提交): CJam,105 [丹尼斯] 不可阻挡的力量(爆竹): 丹尼斯[ Java,269 …