이 코드 골프는 최근 일일 WTF 기사 인 You ca n't handle the true! 에서 영감을 얻었습니다 . 다음과 같이 작성된 문자열 비교 기능이 있습니다.
String yes = "YES";
if ((delay.hashCode()) == yes.hashCode())
Java의 String.hashCode메소드가 방금 구현 된 방식으로 스티브의 팀에게 야기 된 문제를 상상해보십시오 "YES".hashCode() == "NO".hashCode(). 그래서 여기서 제안하는 과제는 다음과 같습니다.
h문자열 매개 변수와 정수 반환 값을 사용하여 가능한 한 적은 수의 문자로 해시 함수h("YES")를 작성h("NO")합니다.
물론 이것은 모든 문자열에 def h(s): return 0해시 충돌을 일으키는 같은 함수와 관련이 있습니다. 이 도전을 더 재미있게하려면 다음 추가 규칙을 따라야합니다.
의 다른 세 이하의 대문자 ASCII 문자 (구성된 18 277 가능한 문자열
^[A-Z]{0,3}$)이 없어야합니다 더 해시 충돌.
설명 (Heiko Oberdiek에서 지적) : 입력 문자열에 이외의 문자가 포함될 수 있으며 A-Z코드에서 임의의 문자열을 해시 할 수 있어야합니다 . (당신은, 그러나, 입력이 있다고 가정 할 수 있습니다 문자열이 아닌 널 포인터 또는 다른 데이터 형식의 목적은.) 그러나,이 반환 값이 일치하지 않는 문자열이 무엇인지는 중요하지 않습니다 ^[A-Z]{0,3}$만큼, 정수입니다.
또한이 기능의 의도를 혼란스럽게하려면 :
코드는 문자 또는 문자열 리터럴 내에 'Y', 'E', 'S', 'N'또는 'O'(대문자 또는 소문자)를 포함해서는 안됩니다.
물론,이 제한은 언어 키워드에 적용되지 않으므로 else, return등 정상입니다.
YESNO이 특정 예외를 확인하기 위해 숫자 ASCII 값을 계속 사용할 수는 없습니다 .