В этом вызове кода вы напишите хеш-функцию в 140 байтах 1 или менее исходного кода. Хеш-функция должна принимать строку ASCII в качестве входных данных и возвращать 24-разрядное целое число без знака ([0, 2 24 -1]) в качестве выходных данных.
Ваша хеш-функция будет оцениваться для каждого слова в этом большом британско-английском словаре 2 . Ваша оценка - это количество слов, которые разделяют значение хэша с другим словом (столкновение).
Побеждает наименьшая оценка, разрывается связь с первым постером.
Прецедент
Перед отправкой, пожалуйста, проверьте ваш сценарий оценки на следующем входе:
duplicate
duplicate
duplicate
duplicate
Если он дает любой результат, кроме 4, он глючит.
Уточняющие правила:
- Ваша хеш-функция должна выполняться в одной строке, а не во всем массиве. Кроме того, ваша хеш-функция может не выполнять какой-либо другой ввод-вывод, кроме входной строки и выходного целого числа.
- Встроенные хеш-функции или аналогичные функции (например, шифрование в байты шифрования) запрещены.
- Ваша хеш-функция должна быть детерминированной.
- В отличие от большинства других конкурсов, оптимизация специально для подсчета очков разрешена.
1 Я знаю, что Twitter ограничивает символы вместо байтов, но для простоты мы будем использовать байты в качестве ограничения для этой задачи.
2 Изменено из wbritish-огромного 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
? Что за...?