Ce code de golf a été inspiré par le récent article du Daily WTF Vous ne pouvez pas gérer le vrai! , qui comporte une comparaison de chaînes écrite comme suit:
String yes = "YES";
if ((delay.hashCode()) == yes.hashCode())
Imaginez le problème que l’équipe de Steve aurait eu si la String.hashCode
méthode de Java avait été implémentée de cette manière "YES".hashCode() == "NO".hashCode()
. Donc, le défi que je propose ici est:
Ecrivez, dans le moins de caractères possible, une fonction de hachage (je l'appellerai
h
) avec un paramètre de chaîne et une valeur de retour entière, telle qu'elleh("YES")
soit égale àh("NO")
.
Bien sûr, il serait trivial de le faire avec une fonction comme def h(s): return 0
, ce qui crée une collision de hachage pour chaque chaîne. Pour rendre ce défi plus intéressant, vous devez respecter la règle supplémentaire suivante:
Parmi les autres 18 277 chaînes possibles composé de trois lettres ou moins ASCII (majuscules
^[A-Z]{0,3}$
), il doit y avoir aucune collision de hachage.
Clarification (soulignée par Heiko Oberdiek): La chaîne de saisie peut contenir des caractères autres que A-Z
, et votre code doit être en mesure de hacher des chaînes arbitraires. (Vous pouvez toutefois supposer que l'entrée est une chaîne de caractères plutôt qu'un pointeur null ou un objet d'un autre type de données.) Toutefois, peu importe la valeur de retour pour les chaînes qui ne correspondent pas ^[A-Z]{0,3}$
, tant que c'est un entier.
De plus, pour brouiller l’intention de cette fonction:
Votre code ne doit contenir aucune des lettres "Y", "E", "S", "N" ou "O" (en majuscules ou minuscules) dans les littéraux de caractères ou de chaînes.
Bien sûr, cette restriction ne concerne pas les mots clés du langage, donc else
, return
, etc. sont très bien.
YESNO
pour vérifier cette exception spécifique n'aide en rien .