Code Golf này được lấy cảm hứng từ bài báo WTF hàng ngày gần đây mà bạn không thể xử lý đúng! , có tính năng so sánh chuỗi được viết là:
String yes = "YES";
if ((delay.hashCode()) == yes.hashCode())
Hãy tưởng tượng những rắc rối mà nó đã gây ra cho nhóm của Steve nếu String.hashCode
phương pháp của Java tình cờ được thực hiện theo cách đó "YES".hashCode() == "NO".hashCode()
. Vì vậy, thách thức tôi đề xuất ở đây là:
Viết, càng ít ký tự càng tốt, hàm băm (tôi sẽ gọi nó
h
) với tham số chuỗi và giá trị trả về số nguyên, sao choh("YES")
bằngh("NO")
.
Tất nhiên, điều này sẽ không quan trọng đối với một hàm như def h(s): return 0
, điều này tạo ra xung đột băm cho mỗi chuỗi. Để làm cho thử thách này thú vị hơn, bạn phải tuân thủ quy tắc bổ sung sau:
Trong số khác 18 277 chuỗi có thể gồm ba hoặc ít chữ ASCII chữ hoa (
^[A-Z]{0,3}$
) thì phải có không va chạm băm.
Làm rõ (được chỉ ra bởi Heiko Oberdiek): Chuỗi đầu vào có thể chứa các ký tự khác A-Z
và mã của bạn phải có thể băm các chuỗi tùy ý. (Tuy nhiên, bạn có thể giả sử rằng đầu vào là một chuỗi ký tự chứ không phải là một con trỏ null hoặc một đối tượng của một số loại dữ liệu khác.) Tuy nhiên, giá trị trả về là gì đối với các chuỗi không khớp ^[A-Z]{0,3}$
, miễn là không quan trọng nó là một số nguyên.
Hơn nữa, để làm xáo trộn ý định của chức năng này:
Mã của bạn không được bao gồm bất kỳ chữ cái 'Y', 'E', 'S', 'N' hoặc 'O' (bằng chữ hoa hoặc chữ thường) trong ký tự hoặc ký tự chuỗi.
Tất nhiên, hạn chế này không áp dụng cho từ khóa ngôn ngữ, vì vậy else
, return
vv cũng tốt.
YESNO
để kiểm tra ngoại lệ cụ thể này.