ในการท้าทายรหัสนี้คุณจะเขียนฟังก์ชันแฮชใน 140 ไบต์1หรือน้อยกว่าของรหัสที่มา ฟังก์ชัน hash ต้องใช้สตริง ASCII เป็นอินพุตและส่งคืนจำนวนเต็มที่ไม่ได้ลงชื่อ 24 บิต ([0, 2 24 -1]) เป็นเอาต์พุต
ฟังก์ชันแฮชของคุณจะได้รับการประเมินสำหรับทุกคำพูดในเรื่องนี้ขนาดใหญ่อังกฤษพจนานุกรมภาษาอังกฤษ 2 คะแนนของคุณคือจำนวนคำที่ใช้ค่าแฮชกับคำอื่น (การชนกัน)
คะแนนต่ำสุดที่ชนะการเชื่อมโยงโดยโปสเตอร์แรก
กรณีทดสอบ
ก่อนส่งโปรดทดสอบสคริปต์การให้คะแนนของคุณจากอินพุตต่อไปนี้:
duplicate
duplicate
duplicate
duplicate
ถ้ามันให้คะแนนใด ๆ นอกเหนือจาก 4 มันเป็นรถ
ชี้แจงกฎ:
- ฟังก์ชันแฮชของคุณจะต้องทำงานในสายเดียวไม่ใช่ทั้งอาเรย์ นอกจากนี้ฟังก์ชันแฮชของคุณอาจไม่ทำ I / O อื่นใดนอกจากสตริงอินพุตและเอาต์พุตจำนวนเต็ม
- ฟังก์ชั่นแฮชในตัวหรือฟังก์ชั่นที่คล้ายกัน (เช่นการเข้ารหัสไปยังไบต์ช่วงชิง)
- ฟังก์ชันแฮชของคุณจะต้องกำหนดไว้ล่วงหน้า
- ตรงกันข้ามกับการแข่งขันอื่น ๆ ส่วนใหญ่ปรับให้เหมาะสมโดยเฉพาะสำหรับการให้คะแนนที่ได้รับอนุญาต
1ฉันทราบว่า Twitter จำกัด ตัวอักขระแทนที่จะเป็นไบต์ แต่เพื่อความง่ายเราจะใช้จำนวนไบต์เป็นข้อ จำกัด สำหรับความท้าทายนี้
2ดัดแปลงจากwbritish-hugeของ 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
? อะไรนะ ...