Este concurso ha terminado.
Debido a la naturaleza de los desafíos de policías y ladrones , el desafío de policías se vuelve mucho más fácil cuando el interés en el desafío de ladrones asociado ha disminuido. Por lo tanto, si bien aún puede publicar funciones hash, su respuesta no será aceptada ni formará parte de la tabla de clasificación.
Este desafío es la búsqueda de la implementación más corta de una función hash que sea resistente a colisiones , es decir, no debería ser factible encontrar dos mensajes diferentes con el mismo hash.
Como policía, intenta inventar e implementar una función hash para encontrar el mejor compromiso entre el tamaño del código y la resistencia a la colisión. ¡Usa demasiados bytes y otro policía te superará!
Como ladrón, intentas frustrar los intentos de los policías al descifrar sus funciones, demostrando que no son adecuadas. ¡Esto los obligará a usar más bytes para fortalecer sus algoritmos!
Desafío policías
Tarea
Implemente una función hash criptográfica H: I -> O de su elección, donde I es el conjunto de todos los enteros no negativos por debajo de 2 2 30 y O es el conjunto de todos los enteros no negativos por debajo de 2 128 .
Puede implementar H como una función real que acepta y devuelve un solo entero, una representación de cadena de un entero o una matriz de enteros o un programa completo que lee desde STDIN e imprime en STDOUT en la base 10 o 16.
Tanteo
H que tiene que resistir el desafío de los ladrones define a continuación.
Si un ladrón derrota su envío en las primeras 168 horas después de publicarlo, se considera agrietado .
La implementación de H debe ser lo más breve posible. La presentación sin descifrar más corta será el ganador del desafío policial.
Reglas adicionales
Si implementa H como una función, proporcione un contenedor para ejecutar la función desde un programa que se comporte como se explicó anteriormente.
Proporcione al menos tres vectores de prueba para su programa o contenedor (entradas de ejemplo y sus salidas correspondientes).
H puede ser su diseño novedoso (preferido) o un algoritmo conocido, siempre que lo implemente usted mismo. Está prohibido usar cualquier tipo de función hash incorporada, función de compresión, cifrado, PRNG, etc.
Cualquier juego incorporado comúnmente utilizado para implementar funciones de hashing (por ejemplo, conversión de base) es un juego justo.
La salida de su programa o función debe ser determinista.
Debe haber un compilador / intérprete gratuito (como en cerveza) que pueda ejecutarse en una plataforma x86 o x64 o desde un navegador web.
Su programa o función debe ser razonablemente eficiente y debe procesar cualquier mensaje en I por debajo de 2 2 19 en menos de un segundo.
Para los casos extremos, el tiempo (de pared) que tome mi máquina (Intel Core i7-3770, 16 GiB de RAM) será decisivo.
Dada la naturaleza de este desafío, está prohibido cambiar el código de su respuesta de cualquier manera, ya sea que altere la salida o no.
Si su envío ha sido descifrado (o incluso si no lo ha sido), puede publicar una respuesta adicional.
Si su respuesta no es válida (por ejemplo, no cumple con la especificación de E / S), elimínela.
Ejemplo
Python 2.7, 22 bytes
def H(M): return M%17
Envoltura
print H(int(input()))
Desafío de ladrones
Tarea
Grieta cualquiera de de los policías presentaciones mediante la publicación de la siguiente en los ladrones hilo : dos mensajes M y N en I de tal manera que H (M) = H (N) y M ≠ N .
Tanteo
Romper las presentaciones de cada policía te da un punto. El ladrón con más puntos gana.
En el caso de un empate, el ladrón atado que logró la sumisión más larga gana.
Reglas adicionales
Cada envío de policía solo se puede descifrar una vez.
Si un envío de policía se basa en un comportamiento definido o no definido por la implementación, solo tiene que encontrar una grieta que funcione (verificablemente) en su máquina.
Cada grieta pertenece a una respuesta separada en el hilo de los ladrones.
Publicar un intento de craqueo inválido le prohíbe descifrar ese envío en particular durante 30 minutos.
No puede descifrar su propia presentación.
Ejemplo
Python 2.7, 22 bytes por usuario8675309
1
y
18
Tabla de clasificación
Envíos seguros
Envíos sin descifrar
Puede usar este fragmento de pila para obtener una lista de respuestas aún no resueltas.
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>