Kontes ini sudah berakhir.
Karena sifat tantangan polisi dan perampok , tantangan polisi menjadi jauh lebih mudah ketika minat terhadap tantangan perampok terkait berkurang. Karena itu, selagi Anda masih dapat memposting fungsi hash, jawaban Anda tidak akan diterima atau menjadi bagian dari papan peringkat.
Tantangan ini adalah pencarian implementasi terpendek dari fungsi hash yang tahan benturan , yaitu, tidak mungkin menemukan dua pesan berbeda dengan hash yang sama.
Sebagai seorang polisi, Anda mencoba untuk menciptakan dan mengimplementasikan fungsi hash menemukan kompromi terbaik antara ukuran kode dan resistensi tabrakan. Gunakan terlalu banyak byte dan polisi lain akan mengalahkan Anda!
Sebagai seorang perampok, Anda mencoba menggagalkan upaya polisi dengan merusak fungsinya, membuktikan bahwa itu tidak sesuai. Ini akan memaksa mereka menggunakan lebih banyak byte untuk memperkuat algoritme mereka!
Tantangan polisi
Tugas
Menerapkan fungsi hash kriptografis H: I -> O pilihan Anda, di mana saya adalah himpunan semua bilangan bulat non-negatif di bawah 2 2 30 dan O adalah himpunan semua bilangan bulat non-negatif di bawah 2 128 .
Anda dapat mengimplementasikan H sebagai fungsi aktual yang menerima dan mengembalikan integer tunggal, representasi string integer atau array integer atau program lengkap yang membaca dari STDIN dan mencetak ke STDOUT di basis 10 atau 16.
Mencetak gol
H bahwa ia harus menolak tantangan perampok yang didefinisikan di bawah ini.
Jika seorang perampok mengalahkan kiriman Anda dalam 168 jam pertama setelah mempostingnya, itu dianggap retak .
Implementasi H harus sesingkat mungkin. Pengajuan terputus terpendek akan menjadi pemenang dari tantangan polisi.
Aturan tambahan
Jika Anda menerapkan H sebagai fungsi, berikan pembungkus untuk menjalankan fungsi dari dalam program yang berperilaku seperti dijelaskan di atas.
Harap berikan setidaknya tiga vektor uji untuk program atau pembungkus Anda (misalnya input dan output yang sesuai).
H dapat berupa desain novel Anda (lebih disukai) atau algoritma yang terkenal, selama Anda menerapkannya sendiri. Dilarang menggunakan fungsi hash bawaan apa pun, fungsi kompresi, sandi, PRNG, dll.
Setiap built-in yang biasa digunakan untuk mengimplementasikan fungsi hashing (misalnya, konversi basis) adalah permainan yang wajar.
Output dari program atau fungsi Anda harus bersifat deterministik.
Seharusnya ada kompiler / juru bahasa gratis (seperti dalam bir) yang dapat dijalankan pada platform x86 atau x64 atau dari dalam browser web.
Program atau fungsi Anda harus cukup efisien dan harus mem-hash pesan apa pun di I di bawah 2 2 19 dalam waktu kurang dari satu detik.
Untuk kasus tepi, waktu (dinding) yang diambil pada komputer saya (Intel Core i7-3770, 16 GiB RAM) akan menentukan.
Mengingat sifat tantangan ini, dilarang mengubah kode jawaban Anda dengan cara apa pun, apakah itu mengubah hasilnya atau tidak.
Jika kiriman Anda telah dipecahkan (atau bahkan jika belum), Anda dapat memposting jawaban tambahan.
Jika jawaban Anda tidak valid (mis. Tidak sesuai dengan spesifikasi I / O), harap hapus.
Contoh
Python 2.7, 22 byte
def H(M): return M%17
Pembungkus
print H(int(input()))
Perampok menantang
Tugas
Crack salah satu polisi kiriman dengan posting berikut di perampok benang : dua pesan M dan N di saya sehingga H (M) = H (N) dan M ≠ N .
Mencetak gol
Memecahkan setiap pengiriman polisi memberi Anda satu poin. Perampok dengan poin terbanyak menang.
Dalam kasus dasi, perampok terikat yang memecahkan pengajuan menang paling lama.
Aturan tambahan
Setiap pengajuan polisi hanya dapat dibobol sekali.
Jika pengiriman polisi bergantung pada perilaku yang ditentukan atau tidak ditentukan implementasi, Anda hanya perlu menemukan celah yang berfungsi (dapat diverifikasi) pada mesin Anda.
Setiap celah milik jawaban terpisah di utas perampok.
Memposting upaya cracking yang tidak valid membuat Anda tidak bisa memecahkan submission tertentu selama 30 menit.
Anda tidak boleh merusak kiriman Anda sendiri.
Contoh
Python 2.7, 22 bytes oleh user8675309
1
dan
18
Papan peringkat
Pengajuan yang aman
Kiriman tidak terputus
Anda dapat menggunakan Cuplikan Stack ini untuk mendapatkan daftar jawaban yang belum retak.
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>