Dalam kode-tantangan ini Anda akan menulis fungsi hash dalam 140 byte 1 atau kurang dari kode sumber. Fungsi hash harus mengambil string ASCII sebagai input, dan mengembalikan integer 24-bit unsigned ([0, 2 24 -1]) sebagai output.
Fungsi hash Anda akan dievaluasi untuk setiap kata dalam kamus Inggris-Inggris 2 yang besar ini . Skor Anda adalah jumlah kata yang berbagi nilai hash dengan kata lain (tabrakan).
Skor terendah menang, dasi rusak oleh poster pertama.
Kasus cobaan
Sebelum mengirim, silakan uji skrip penilaian Anda pada input berikut:
duplicate
duplicate
duplicate
duplicate
Jika memberikan skor selain dari 4, itu buggy.
Aturan klarifikasi:
- Fungsi hash Anda harus dijalankan pada string tunggal, bukan seluruh array. Selain itu, fungsi hash Anda mungkin tidak melakukan I / O selain String input dan integer output.
- Fungsi hash bawaan atau fungsionalitas serupa (mis. Enkripsi untuk perebutan byte) tidak diizinkan.
- Fungsi hash Anda harus deterministik.
- Berlawanan dengan kebanyakan kontes lain yang mengoptimalkan secara khusus untuk input penilaian diperbolehkan.
1 Saya sadar Twitter membatasi karakter alih-alih byte, tetapi untuk kesederhanaan kita akan menggunakan byte sebagai batas untuk tantangan ini.
2 Dimodifikasi dari wbritish-huge Debian , menghilangkan kata-kata non-ASCII.
D=340275
kata-kata dan R=2^24
output hash, hash acak memiliki D^2/(2*R) = 3450
pasangan bertabrakan yang diharapkan , beberapa di antaranya tumpang tindih. Ada D^3/(6*R^2) = 23
tiga kali lipat bertabrakan yang diharapkan dan jumlah tabrakan yang lebih besar yang dapat diabaikan, yang berarti tiga kali lipat ini cenderung terpisah. Ini memberikan 6829
kata-kata yang diharapkan yang memiliki nilai hash, ~ 70
tiga kali lipat dan sisanya berpasangan. Deviasi standar diperkirakan 118
, jadi mendapatkan <6200
dengan hash acak kira-kira acara 5 sigma.
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch's
? Apa yang ...?