Цей конкурс закінчився.
Зважаючи на характер викликів поліцейських та грабіжників, виклик поліцейських стає набагато простішим, коли інтерес до асоційованого виклику грабіжників зменшився. Тому, хоча ви все ще можете розміщувати хеш-функції, ваша відповідь не буде прийнята або не буде частиною таблиці лідерів.
Цей виклик - це пошук найкоротшого виконання хеш-функції , стійкої до зіткнень , тобто знайти два різних повідомлення з одним і тим же хешем має бути нездійсненно.
Як поліцейський, ви намагаєтесь винайти та реалізувати хеш-функцію, знаходячи найкращий компроміс між розміром коду та стійкістю до зіткнення. Використовуйте занадто багато байтів, і інший поліцейський перевершить вас!
Як грабіжник, ви намагаєтесь зірвати спроби поліцейських, розбивши їх функції, доводячи, що вони непридатні. Це змусить їх використовувати більше байтів для посилення своїх алгоритмів!
Виклики копів
Завдання
Реалізуйте криптографічну хеш-функцію H: I -> O на ваш вибір, де I - безліч усіх негативних цілих чисел нижче 2 2 30, а O - безліч всіх негативних цілих чисел нижче 2 128 .
Ви можете реалізувати H як фактичну функцію, яка приймає і повертає єдине ціле число, рядкове подання цілого чи масиву цілих чисел або повну програму, яка читає зі STDIN і друкує до STDOUT в базі 10 або 16.
Оцінка балів
H, що вона має протистояти розбійникові, визначеному нижче
Якщо грабіжник зазнає поразки у ваших поданнях протягом перших 168 годин після публікації, він вважається розбитим .
Реалізація Н повинна бути якомога коротшою. Найкоротший нереалізований подання стане переможцем виклику копів.
Додаткові правила
Якщо ви реалізуєте функцію 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
Таблиця лідерів
Безпечні матеріали
Невикористані подання
Ви можете використовувати цей фрагмент стека, щоб отримати список ще не взламаних відповідей.
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>