Este concurso acabou.
Devido à natureza dos desafios de policiais e ladrões , o desafio de policiais se torna muito mais fácil quando o interesse no desafio associado a ladrões diminui. Portanto, embora você ainda possa postar funções de hash, sua resposta não será aceita ou fará parte da tabela de classificação.
Este desafio é a busca pelo menor implementação de uma função hash que é resistente ao choque , ou seja, deve ser impraticável encontrar duas mensagens diferentes com o mesmo hash.
Como policial, você tenta inventar e implementar uma função de hash, encontrando o melhor compromisso entre o tamanho do código e a resistência à colisão. Use muitos bytes e outro policial irá derrotar você!
Como ladrão, você tenta frustrar as tentativas dos policiais quebrando suas funções, provando que elas são inadequadas. Isso os forçará a usar mais bytes para fortalecer seus algoritmos!
Desafio da polícia
Tarefa
Implemente uma função hash criptográfica H: I -> O de sua escolha, onde I é o conjunto de todos os números inteiros não negativos abaixo de 2 2 30 e O é o conjunto de todos os números inteiros não negativos abaixo de 2 128 .
Você pode implementar H como uma função real que aceita e retorna um único número inteiro, uma representação de seqüência de caracteres de um número inteiro ou uma matriz de números inteiros ou um programa completo que lê STDIN e imprime em STDOUT na base 10 ou 16.
Pontuação
H que tem que resistir ao desafio dos ladrões definido abaixo.
Se um ladrão derrotar seu envio nas primeiras 168 horas após a publicação, ele será considerado rachado .
A implementação de H deve ser o mais curta possível. A inscrição mais curta e sem rachaduras será a vencedora do desafio da polícia.
Regras adicionais
Se você implementar H como uma função, forneça um wrapper para executar a função a partir de um programa que se comporta conforme explicado acima.
Forneça pelo menos três vetores de teste para o seu programa ou wrapper (entradas de exemplo e suas saídas correspondentes).
H pode ser seu novo design (preferencial) ou um algoritmo conhecido, desde que você o implemente. É proibido usar qualquer tipo de função hash embutida, função de compactação, cifra, PRNG, etc.
Qualquer built-in comumente usado para implementar funções de hash (por exemplo, conversão de base) é um jogo justo.
A saída do seu programa ou função deve ser determinística.
Deve haver um compilador / intérprete gratuito (como na cerveja) que possa ser executado em uma plataforma x86 ou x64 ou de um navegador da web.
Seu programa ou função deve ser razoavelmente eficiente e deve conter qualquer mensagem em I abaixo de 2 2 19 em menos de um segundo.
Para casos extremos, o tempo (de parede) gasto na minha máquina (Intel Core i7-3770, 16 GiB de RAM) será decisivo.
Dada a natureza desse desafio, é proibido alterar o código da sua resposta de qualquer forma, independentemente de alterar ou não a saída.
Se o seu envio foi quebrado (ou mesmo se não), você pode postar uma resposta adicional.
Se sua resposta for inválida (por exemplo, ela não está de acordo com a especificação de E / S), exclua-a.
Exemplo
Python 2.7, 22 bytes
def H(M): return M%17
Embrulho
print H(int(input()))
Desafio de ladrões
Tarefa
Rachar qualquer das bobinas apresentações afixando o seguinte na ladrões rosca : duas mensagens M e N em I de tal modo que H (H) = H (N) e H ≠ N .
Pontuação
Quebrar cada envio de policial ganha um ponto. O ladrão com mais pontos ganha.
No caso de empate, o ladrão empatado que quebrou a finalização mais longa vence.
Regras adicionais
Todo envio de policial só pode ser quebrado uma vez.
Se um envio de policial depende de um comportamento definido ou indefinido da implementação, você precisa encontrar apenas uma falha que funcione (verificável) na sua máquina.
Cada rachadura pertence a uma resposta separada no tópico dos ladrões.
A publicação de uma tentativa de crack inválida o impede de quebrar esse envio específico por 30 minutos.
Você não pode quebrar sua própria submissão.
Exemplo
Python 2.7, 22 bytes por user8675309
1
e
18
Entre os melhores
Envios seguros
Envios sem rachaduras
Você pode usar esse snippet de pilha para obter uma lista de respostas ainda não quebradas.
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>