W tym wyzwaniu kodu napiszesz funkcję skrótu w 140 bajtach 1 lub mniej kodu źródłowego. Funkcja skrótu musi pobrać ciąg ASCII jako dane wejściowe i zwrócić 24-bitową liczbę całkowitą bez znaku ([0, 2 24 -1]) jako wynik.
Twoja funkcja haszująca będzie oceniana dla każdego słowa w tym dużym słowniku brytyjsko-angielskim 2 . Twój wynik to liczba słów, które dzielą wartość skrótu z innym słowem (kolizją).
Wygrywa najniższy wynik, remisy zerwane przez pierwszy plakat.
Przypadek testowy
Przed przesłaniem sprawdź skrypt oceniania na podstawie następujących danych wejściowych:
duplicate
duplicate
duplicate
duplicate
Jeśli daje wynik inny niż 4, jest błędny.
Zasady wyjaśniające:
- Twoja funkcja skrótu musi działać na jednym ciągu, a nie na całej tablicy. Ponadto funkcja skrótu może nie wykonywać żadnych innych operacji we / wy poza łańcuchem wejściowym i liczbą całkowitą wyjściową.
- Wbudowane funkcje skrótu lub podobne funkcje (np. Szyfrowanie do bajtów szyfrujących) są niedozwolone.
- Twoja funkcja skrótu musi być deterministyczna.
- W przeciwieństwie do większości innych konkursów dozwolona jest optymalizacja specjalnie pod kątem punktacji.
1 Wiem, że Twitter ogranicza znaki zamiast bajtów, ale dla uproszczenia użyjemy bajtów jako ograniczenia tego wyzwania.
2 Zmodyfikowane z wbritish-ogromny Debiana , usuwając wszelkie słowa spoza ASCII.
D=340275
słów i R=2^24
wyników mieszania losowy skrót ma spodziewane D^2/(2*R) = 3450
pary kolidujące, z których niektóre nakładają się. Spodziewane są D^3/(6*R^2) = 23
trzykrotne zderzenia i niewielka liczba większych zderzeń, co oznacza, że te potrójne są prawdopodobnie rozłączne. Daje to oczekiwane 6829
słowa, które dzielą wartość skrótu ~ 70
w potrójnych, a reszta w parach. Standardowe odchylenie jest szacowane na 118
, więc uzyskanie <6200
losowego skrótu jest w przybliżeniu zdarzeniem 5 sigma.
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch's
? Co...?