Bu Code Golf, Daily WTF makalesinde , True ile başa çıkamazsın ! , şöyle yazılmış bir dize karşılaştırması içerir:
String yes = "YES";
if ((delay.hashCode()) == yes.hashCode())
Java'nın String.hashCode
yöntemi yeni bir şekilde uygulanıyorsa, Steve ekibinin neden olacağı sorunu hayal edin "YES".hashCode() == "NO".hashCode()
. Yani, burada önerdiğim zorluk:
Bir karakter
h
parametresine ve tamsayı dönüş değerineh("YES")
eşit değerde olabildiğince az karakterde bir karma işlevi (onu arayacağım ) yazınh("NO")
.
Elbette, bu def h(s): return 0
, her dize için karma çarpışma yapan gibi bir işlevle ilgisiz olur. Bu meydan okumayı daha ilginç hale getirmek için aşağıdaki ek kurala uymalısınız:
Of diğer üç veya daha az büyük ASCII harf (oluşan 18 277 olası dizeleri
^[A-Z]{0,3}$
), olmalıdır hiçbir karma çarpışmalar.
Açıklama (Heiko Oberdiek tarafından işaret): girdi dizesi dışındaki karakterler içerebilir A-Z
, ve kod gerekir keyfi dizeleri karma edebilmek. (Ancak, giriş varsayabiliriz olan bir karakter dizesi yerine bir boş gösterici ya da başka veri türünde bir nesne.) Ancak, dönüş değeri eşleşmeyen dizeleri ne fark etmez ^[A-Z]{0,3}$
sürece, bu bir tamsayı.
Ayrıca, bu işlevin amacını karıştırmak için:
Kodunuz, karakter veya string değişmezlerinin içinde 'Y', 'E', 'S', 'N' veya 'O' (büyük veya küçük harf) harflerini içermemelidir.
Tabii ki, bu kısıtlama dil anahtar için geçerli değildir, bu yüzden else
, return
vb iyidir.
YESNO
Bu özel istisnayı kontrol etmek için sayısal ASCII değerlerini kullanmaya devam etmemize yardımcı olmuyor .