Golf Kode ini terinspirasi oleh artikel Harian WTF, You Can't Handle the True! , yang menampilkan perbandingan string yang ditulis sebagai:
String yes = "YES";
if ((delay.hashCode()) == yes.hashCode())
Bayangkan masalah yang akan ditimbulkan tim Steve jika String.hashCode
metode Java kebetulan diterapkan dengan cara seperti itu "YES".hashCode() == "NO".hashCode()
. Jadi, tantangan yang saya usulkan di sini adalah:
Tulis, sesedikit mungkin karakter, fungsi hash (saya akan menyebutnya
h
) dengan parameter string dan nilai pengembalian integer, sehinggah("YES")
sama denganh("NO")
.
Tentu saja, ini akan sepele untuk dilakukan dengan fungsi seperti def h(s): return 0
, yang membuat tabrakan hash untuk setiap string. Untuk membuat tantangan ini lebih menarik, Anda harus mematuhi aturan tambahan berikut:
Dari lain 18 277 string mungkin terdiri dari tiga atau lebih sedikit huruf ASCII huruf besar (
^[A-Z]{0,3}$
), harus ada ada tabrakan hash.
Klarifikasi (ditunjukkan oleh Heiko Oberdiek): String input dapat berisi karakter selain A-Z
, dan kode Anda harus dapat hash string sewenang-wenang. (Anda dapat, bagaimanapun, menganggap bahwa input adalah string karakter daripada pointer nol atau objek dari beberapa tipe data lainnya.) Namun, tidak masalah apa nilai pengembalian untuk string yang tidak cocok ^[A-Z]{0,3}$
, selama itu adalah bilangan bulat.
Selanjutnya, untuk mengaburkan maksud fungsi ini:
Kode Anda tidak boleh menyertakan huruf 'Y', 'E', 'S', 'N', atau 'O' (dalam huruf besar atau kecil) dalam karakter atau string literal.
Tentu saja, pembatasan ini tidak berlaku untuk kata kunci bahasa, sehingga else
, return
, dll baik-baik saja.
YESNO
untuk memeriksa pengecualian khusus ini.