比赛结束了。
由于警察和强盗挑战的性质,当对相关强盗挑战的兴趣减少时,警察挑战变得容易得多。因此,尽管您仍然可以发布哈希函数,但是您的答案将不会被接受或成为排行榜的一部分。
这个挑战是最短实施的搜索哈希函数是抗碰撞,也就是说,它应该是不可能找到相同的哈希两个不同的消息。
作为警察,您尝试发明并实现一个哈希函数,以在代码大小和抗冲突性之间找到最佳折衷方案。使用太多字节,另一位警察将使您失望!
作为强盗,您尝试通过破坏警察的职能来挫败他们的尝试,证明它们不合适。这将迫使他们使用更多字节来增强算法!
警察挑战
任务
实现加密散列函数H:我- > 0您选择,其中我在2以下的集合中的所有非负整数的2 30和Ø低于2集的所有非负整数的128。
您可以将H实现为实际函数,该函数接受并返回单个整数,整数或整数数组的字符串表示形式,或者从STDIN读取并以10或16为基数打印到STDOUT的完整程序。
计分
H必须抵抗下面定义的强盗挑战。
如果强盗在发布后的168小时内将您提交的内容拒之门外,则认为该文件已被破解。
H的实现应尽可能短。最短的不打扰的提交将是警察挑战赛的获胜者。
附加规则
如果将H实现为函数,请提供一个包装程序,以从行为如上所述的程序中执行该函数。
请为您的程序或包装器至少提供三个测试向量(示例输入及其相应的输出)。
H可以是您的新颖设计(首选)或众所周知的算法,只要您自己实现即可。禁止使用任何类型的内置哈希函数,压缩函数,密码,PRNG等。
通常用于实现哈希函数(例如,基本转换)的任何内置方法都是公平的游戏。
程序或函数的输出必须是确定性的。
应该有一个免费的(如在啤酒中)编译器/解释器,可以在x86或x64平台上或从Web浏览器中运行。
您的程序或函数应该相当高效,并且必须在不到2秒的时间内对I 2 2 19以下的消息进行哈希处理。
对于边缘情况,在我的计算机(Intel Core i7-3770,16 GiB RAM)上花费的(墙)时间将是决定性的。
考虑到这一挑战的性质,无论是否更改输出,都禁止以任何方式更改答案的代码。
如果您提交的内容被破解(甚至没有被破解),则可以发布其他答案。
如果您的答案无效(例如,它不符合I / O规范),请删除它。
例
Python 2.7,22个字节
def H(M): return M%17
包装纸
print H(int(input()))
强盗挑战
任务
通过在强盗的线程中张贴以下内容来破解任何警察的提交:I中的两个消息M和N,使得H(M)= H(N)和M≠N。
计分
破解每个警察提交的内容可以使您获得1分。得分最高的强盗获胜。
如果是平局,则破解最长提交的并列强盗获胜。
附加规则
每次提交的警察只能被破解一次。
如果警察提交依赖于实现定义的行为或未定义的行为,则只需找到在计算机上可验证的破解即可。
每个破解都属于强盗线程中的一个单独答案。
发布无效的破解尝试会禁止您破解特定的提交文件30分钟。
您可能不会破解自己的提交。
例
Python 2.7,user8675309的22个字节
1
和
18
排行榜
安全提交
完整的作品
您可以使用此堆栈片段获取尚未破解的答案的列表。
function g(p){$.getJSON('//api.stackexchange.com/2.2/questions/51068/answers?page='+p+'&pagesize=100&order=desc&sort=creation&site=codegolf&filter=!.Fjs-H6J36w0DtV5A_ZMzR7bRqt1e',function(s){s.items.map(function(a){var h=$('<div/>').html(a.body).children().first().text();if(!/cracked/i.test(h)&&(typeof a.comments=='undefined'||a.comments.filter(function(b){var c=$('<div/>').html(b.body);return /^cracked/i.test(c.text())||c.find('a').filter(function(){return /cracked/i.test($(this).text())}).length>0}).length==0)){var m=/^\s*((?:[^,(\s]|\s+[^-,(\s])+)\s*(?:[,(]|\s-).*?([0-9]+)/.exec(h);$('<tr/>').append($('<td/>').append($('<a/>').text(m?m[1]:h).attr('href',a.link)),$('<td class="score"/>').text(m?m[2]:'?'),$('<td/>').append($('<a/>').text(a.owner.display_name).attr('href',a.owner.link))).appendTo('#listcontent');}});if(s.length==100)g(p+1);});}g(1);
table th, table td {padding: 5px} th {text-align: left} .score {text-align: right} table a {display:block}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><table><tr><th>Language</th><th class="score">Length</th><th>User</th></tr><tbody id="listcontent"></tbody></table>