In questa sfida del codice scriverai una funzione hash in 140 byte 1 o meno del codice sorgente. La funzione hash deve accettare una stringa ASCII come input e restituire un intero senza segno a 24 bit ([0, 2 24 -1]) come output.
La tua funzione hash verrà valutata per ogni parola in questo grande dizionario inglese britannico 2 . Il tuo punteggio è la quantità di parole che condividono un valore di hash con un'altra parola (una collisione).
Vince il punteggio più basso, pareggi interrotti dal primo poster.
Caso di prova
Prima di inviare, prova lo script di punteggio sul seguente input:
duplicate
duplicate
duplicate
duplicate
Se dà un punteggio diverso da 4, è difettoso.
Regole per chiarire:
- La funzione hash deve essere eseguita su una singola stringa, non su un intero array. Inoltre, la funzione hash non può eseguire alcun altro I / O diverso dalla stringa di input e dall'intero di output.
- Le funzioni hash integrate o funzionalità simili (ad es. Crittografia per cifrare i byte) non sono consentite.
- La tua funzione hash deve essere deterministica.
- Contrariamente alla maggior parte degli altri concorsi, è consentita l'ottimizzazione specifica per l'input del punteggio.
1 Sono consapevole che Twitter limita i caratteri anziché i byte, ma per semplicità useremo i byte come limite per questa sfida.
2 Modificato dall'enorme wbritish di Debian , rimuovendo qualsiasi parola non ASCII.
D=340275
parole e gli R=2^24
output di hash, un hash casuale ha una D^2/(2*R) = 3450
coppia in collisione prevista , alcuni dei quali si sovrappongono. Sono previste D^3/(6*R^2) = 23
tre triple in collisione e un numero trascurabile di collisioni maggiori, il che significa che queste triple sono probabilmente disgiunte. Questo dà le 6829
parole attese che condividono un valore di hash, ~ 70
in triple e il resto in coppie. La deviazione standard è stimata in 118
, quindi ottenere <6200
con un hash casuale è all'incirca un evento a 5 sigma.
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch's
? Cosa ...