Bu kod mücadelesinde 140 bayt 1 veya daha az kaynak kodunda bir karma işlevi yazacaksınız . Karma işlevi giriş olarak bir ASCII stringi almalı ve çıkış olarak 24 bit işaretsiz tamsayı ([0, 2 24 -1]) döndürmelidir .
Bu büyük İngiliz İngilizcesi 2 sözlükteki her kelime için karma işleviniz değerlendirilecektir . Puanınız, karma değeri başka bir kelimeyle (çarpışma) paylaşan kelimelerin miktarıdır.
En düşük puan kazanır, ilk poster tarafından kırılan bağlar.
Test durumu
Göndermeden önce, lütfen puanlama komut dosyanızı aşağıdaki girişte test edin:
duplicate
duplicate
duplicate
duplicate
4'ten başka bir puan verirse, buggy olur.
Açıklama kuralları:
- Karma işleviniz, bir dizinin tamamı değil tek bir dizgede çalışmalıdır. Ayrıca, karma işleviniz giriş dizgisi ve çıktı tamsayısından başka bir G / Ç yapamayabilir.
- Yerleşik karma işlevleri veya benzer işlevler (örneğin, karıştırılan baytlara şifreleme) izin verilmez.
- Karma işleviniz deterministic olmalıdır.
- Diğer yarışmaların aksine, puanlama girdisi için özellikle optimizasyona izin verilir.
1 Twitter'ın bayt yerine karakterleri sınırladığını biliyorum, ancak basitlik için bu bayt için sınırlama olarak baytları kullanacağız.
2 Debian's wbritish-huge'den ASCII olmayan kelimeleri kaldırarak değiştirildi.
D=340275
Kelimeler ve R=2^24
karma çıktılarda rastgele bir karma D^2/(2*R) = 3450
, bazıları çakışan beklenen bir çarpışma çiftine sahiptir . Beklenen bir D^3/(6*R^2) = 23
çarpışan üçlü ve önemsiz sayıda daha büyük çarpışma vardır, bu üçlülerin muhtemelen birbirinden ayrı olduğu anlamına gelir. Bu, üçlü, geri kalanını çiftler halinde 6829
, karma değeri paylaşan beklenen bir sözcük verir 70
. Standart sapma olarak tahmin edilir 118
, bu nedenle <6200
rastgele bir karma ile elde kabaca 5 sigma olayıdır.
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch's
? Ne ...?