У цьому виклику коду ви напишете хеш-функцію в 140 байт 1 або менше вихідного коду. Хеш-функція повинна приймати рядок ASCII і вводити 24-бітне ціле число без підпису ([0, 2 24 -1]) як вихід.
Ваша хеш-функція буде оцінена для кожного слова у цьому великому англійському англійському словнику 2 . Ваш бал - це кількість слів, які поділяють хеш-значення з іншим словом (зіткнення).
Виграє найнижчий бал, зв’язки розірвані першим плакатом.
Тестовий випадок
Перш ніж надсилати, будь ласка, протестуйте свій сценарій оцінювання на наступному вкладі:
duplicate
duplicate
duplicate
duplicate
Якщо вона дає будь-яку оцінку, крім 4, це баггі.
Уточнюючі правила:
- Ваша хеш-функція повинна працювати на одній строці, а не на цілому масиві. Крім того, ваша хеш-функція може не виконувати жодного іншого вводу-виводу, крім вхідного рядка та цілого виводу.
- Вбудовані хеш-функції або подібні функціональні можливості (наприклад, шифрування до байтів для сканування) заборонено.
- Ваша хеш-функція повинна бути детермінованою.
- На відміну від більшості інших змагань, дозволено оптимізувати спеціально для введення рахунків.
1 Мені відомо, що Twitter обмежує символи замість байтів, але для простоти ми будемо використовувати байти як обмеження для цього завдання.
2 Модифікований з величезного вбрання Debian , видаляючи будь-які слова, що не належать до ASCII.
D=340275
словами та R=2^24
хеш-виводами випадковий хеш має очікувані D^2/(2*R) = 3450
пари, що стикаються, деякі з яких перетинаються. Існує очікуване D^3/(6*R^2) = 23
зіткнення трійки і незначна кількість більших зіткнень, а це означає, що ці трійки, ймовірно, неперервні. Це дає очікувані 6829
слова, які ділять хеш-значення, ~ 70
у трійках, а решта в парах. Стандартне відхилення оцінюється в 118
, тому отримання <6200
випадкового хешу - це приблизно подія в 5 сигм.
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch's
? Що за...?