Этот конкурс окончен.
Из-за характера проблем полицейских и грабителей, задача полицейских становится намного легче, когда интерес к связанной проблеме грабителей уменьшился. Поэтому, хотя вы все еще можете публиковать хэш-функции, ваш ответ не будет принят или станет частью списка лидеров.
Эта задача заключается в поиске самой короткой реализации хеш-функции, которая устойчива к коллизиям , т. Е. Должно быть невозможно найти два разных сообщения с одинаковым хеш-кодом.
Как полицейский, вы пытаетесь изобрести и реализовать хеш-функцию, находя лучший компромисс между размером кода и устойчивостью к коллизиям. Используйте слишком много байтов, и другой полицейский обгонит вас!
Как грабитель, вы пытаетесь помешать попыткам полицейских, взломав их функции, доказав, что они непригодны. Это заставит их использовать больше байтов для усиления своих алгоритмов!
Вызов копов
задача
Реализуйте криптографическую хеш-функцию H: I -> O по вашему выбору, где I - множество всех неотрицательных целых чисел ниже 2 2 30, а O - множество всех неотрицательных целых чисел ниже 2 128 .
Вы можете реализовать H как фактическую функцию, которая принимает и возвращает одно целое число, строковое представление целого числа или массив целых чисел или полную программу, которая читает из STDIN и печатает в STDOUT в основаниях 10 или 16.
счет
H что он должен противостоять вызову грабителей, определенному ниже.
Если грабитель побеждает ваше представление в первые 168 часов после публикации, оно считается взломанным .
Реализация H должна быть максимально короткой. Самая короткая непроверенная подача будет победителем соревнования полицейских.
Дополнительные правила
Если вы реализуете H как функцию, пожалуйста, предоставьте оболочку для выполнения функции из программы, которая ведет себя так, как описано выше.
Пожалуйста, предоставьте не менее трех тестовых векторов для вашей программы или оболочки (например, входные данные и их соответствующие выходные данные).
H может быть вашим новым дизайном (предпочтительным) или известным алгоритмом, если вы реализуете его самостоятельно. Запрещается использовать любые встроенные хэш-функции, функции сжатия, шифрования, PRNG и т. Д.
Любая встроенная функция, обычно используемая для реализации функций хеширования (например, базовое преобразование), является честной игрой.
Вывод вашей программы или функции должен быть детерминированным.
Должен быть бесплатный (как в пиве) компилятор / интерпретатор, который можно запустить на платформе x86 или x64 или из веб-браузера.
Ваша программа или функция должна быть достаточно эффективной и должна хэшировать любое сообщение в I ниже 2 2 19 менее чем за секунду.
Для крайних случаев решающее значение будет иметь (настенное) время, необходимое на моем компьютере (Intel Core i7-3770, 16 ГБ ОЗУ).
Учитывая природу этой проблемы, запрещено каким-либо образом изменять код вашего ответа, независимо от того, изменяет ли он вывод или нет.
Если ваша заявка была взломана (или даже нет), вы можете опубликовать дополнительный ответ.
Если ваш ответ неверен (например, он не соответствует спецификации ввода / вывода), удалите его.
пример
Python 2.7, 22 байта
def H(M): return M%17
обертка
print H(int(input()))
Вызов грабителей
задача
Трещина любой из полицейских Доводы, разместив следующее в грабителей нити : два сообщения M и N в I таким образом, что H (M) = H (N) и M ≠ N .
счет
Взлом каждого подчиненного полицейского приносит вам одно очко. Грабитель с наибольшим количеством очков побеждает.
В случае ничьей побеждает грабитель, взломавший самую длинную отправку.
Дополнительные правила
Каждое подчинение полицейского может быть взломано только один раз.
Если представление полицейского основано на поведении, определяемом реализацией или неопределенном, вам нужно только найти трещину, которая работает (достоверно) на вашем компьютере.
Каждая трещина принадлежит отдельному ответу в ветке грабителей.
Публикация недопустимой попытки взлома запрещает взломать эту конкретную отправку в течение 30 минут.
Вы не можете взломать ваше собственное представление.
пример
Python 2.7, 22 байта пользователем8675309
1
а также
18
Leaderboard
Безопасные представления
Не взломанные представления
Вы можете использовать этот фрагмент стека, чтобы получить список еще не взломанных ответов.
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>