Mon ami et moi avons ce jeu que nous jouons avec des mots. C'est un passe-temps amusant et cela implique "d'annuler" les lettres d'un mot jusqu'à ce qu'il ne reste plus rien. Je suis vraiment fatigué qu'il soit tellement plus rapide que moi, donc c'est votre travail de le mettre en œuvre et de me laisser enfin le battre. Évidemment, puisque je dois rendre le programme aussi facile à cacher que possible, il doit être aussi petit que possible.
Comment fonctionne ce jeu?
Le jeu est un algorithme assez simple. Il réduit une chaîne alphabétique jusqu'à ce qu'elle ne puisse plus être réduite, ce qui en fait une sorte de hachage. Le jeu réel que nous, les humains, sommes très difficiles à implémenter, mais il peut être simplifié dans l'algorithme suivant:
Vous commencez par plier l'alphabet en deux et aligner les deux pièces comme ceci:
a b c d e f g h i j k l m
z y x w v u t s r p q o n
Ensuite, en partant du milieu, vous affectez les entiers positifs à la moitié supérieure et les négatifs au bas:
a b c d e f g h i j k l m
13 12 11 10 9 8 7 6 5 4 3 2 1
z y x w v u t s r p q o n
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
Ensuite, vous prenez votre chaîne (nous utiliserons hello world
) et en ignorant tous les caractères non alphabétiques, traduisez-la:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
Ensuite, vous additionnez les valeurs des lettres. Ceux qui étaient alignés dans le diagramme précédent (par exemple, d
et w
, l
et o
) seront annulés, tandis que les autres s'additionneront.
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12 est le nombre pour b
, donc le hachage de hello world
estb
Pour un mot qui annule complètement (par exemple love
), vous sortie le « 0 caractère »: -
. Notez que dans l'entrée, -
sera toujours ignoré. Cela n'a d'importance que dans la sortie.
Si l'ampleur du nombre est supérieur à 13, alors vous commencez à doubler sur les a
« s et z
» s vous prenez essentiellement autant a
« s ou z
d » ajustement dans le nombre et prendre tout ce qui est à gauche dans la dernière lettre comme ceci:
code golf: 43.
Convient à 3 a
et il en reste 4:
aaa 4: j
result: aaaj
Astuce: Cette partie est fondamentalement divmod
sauf qu'elle arrondit vers zéro, non -infinity
(par exemple -43 deviendrait 3 z
et et a -4
qui est p
ainsi zzzp
).
Remarque: le tiret ne vient pas si le a
«ou z
» s'intègre parfaitement, seulement s'il est exact 0
.
Clarifications:
- Le hachage est cas dans sensible
- Les échappatoires standard ne sont pas autorisées
- Les E / S peuvent être dans n'importe quel format qui n'est pas trop bizarre, stdin, stdout, arg en ligne de commande, fonction, etc.
- Il s'agit de code-golf, donc la taille la plus courte en octets l' emporte.
Exemples:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
love
est vide ...