Trong thử thách mã này , bạn sẽ viết hàm băm bằng 140 byte 1 hoặc ít hơn mã nguồn. Hàm băm phải lấy một chuỗi ASCII làm đầu vào và trả về số nguyên không dấu 24 bit ([0, 2 24 -1]) làm đầu ra.
Hàm băm của bạn sẽ được đánh giá cho mỗi từ trong từ điển tiếng Anh 2 lớn này . Điểm của bạn là lượng từ chia sẻ giá trị băm với một từ khác (xung đột).
Điểm số thấp nhất chiến thắng, mối quan hệ bị phá vỡ bởi poster đầu tiên.
Trường hợp thử nghiệm
Trước khi gửi, vui lòng kiểm tra tập lệnh ghi điểm của bạn trên đầu vào sau:
duplicate
duplicate
duplicate
duplicate
Nếu nó cho bất kỳ điểm nào ngoài 4, thì đó là lỗi.
Làm rõ các quy tắc:
- Hàm băm của bạn phải chạy trên một chuỗi, không phải toàn bộ mảng. Ngoài ra, hàm băm của bạn có thể không thực hiện bất kỳ I / O nào khác ngoài chuỗi đầu vào và số nguyên đầu ra.
- Các hàm băm tích hợp hoặc chức năng tương tự (ví dụ mã hóa để xáo trộn byte) không được phép.
- Hàm băm của bạn phải có tính xác định.
- Trái với hầu hết các cuộc thi khác, tối ưu hóa cụ thể cho đầu vào tính điểm được cho phép.
1 Tôi biết Twitter giới hạn các ký tự thay vì byte, nhưng để đơn giản, chúng tôi sẽ sử dụng byte làm giới hạn cho thử thách này.
2 Được sửa đổi từ rất lớn của Debian , loại bỏ mọi từ không phải ASCII.
D=340275
từ và R=2^24
kết quả băm, một hàm băm ngẫu nhiên có một D^2/(2*R) = 3450
cặp va chạm dự kiến , một số trong đó trùng lặp. Có một D^3/(6*R^2) = 23
bộ ba va chạm dự kiến và số lượng va chạm lớn hơn không đáng kể, có nghĩa là những bộ ba này có khả năng rời rạc. Điều này cung cấp một 6829
từ dự kiến chia sẻ giá trị băm, ~ 70
trong ba lần và phần còn lại theo cặp. Độ lệch chuẩn được ước tính 118
, do đó, <6200
với một hàm băm ngẫu nhiên là khoảng 5 sự kiện sigma.
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch's
? Cái gì...?