Mi amigo y yo tenemos este juego que jugamos con palabras. Es un pasatiempo divertido e implica "cancelar" letras en una palabra hasta que no quede nada. Estoy realmente cansado de que sea mucho más rápido que yo, así que es tu trabajo implementarlo y dejarme finalmente vencerlo. Obviamente, dado que tengo que hacer que el programa sea lo más fácil de ocultar posible, tiene que ser lo más pequeño posible.
¿Cómo funciona este juego?
El juego es un algoritmo bastante simple. Reduce una cadena alfabética hasta que no se puede reducir más, lo que la convierte en una especie de hash. El juego real que hacemos los humanos es muy difícil de implementar, pero se puede simplificar en el siguiente algoritmo:
Empiezas doblando el alfabeto por la mitad y alineando las dos piezas de la siguiente manera:
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
Luego, comenzando desde el medio, asigna los enteros positivos a la mitad superior y los negativos a la parte inferior:
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
Luego toma su cadena (la usaremos hello world
) e ignora los caracteres no alfabéticos, traduzca:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
Luego sumas los valores de las letras. Los que se alinearon en el diagrama anterior (por ejemplo, d
y w
, l
y o
) se cancelan, mientras que los otros van a sumar.
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12 es el número para b
, entonces el hash de hello world
esb
Para una palabra que anula por completo (por ejemplo love
), que la salida "0 carácter": -
. Tenga en cuenta que en la entrada, -
todavía se tendrá en cuenta. Solo importa en la salida.
Si la magnitud del número es mayor que 13, entonces comienzas a duplicar los a
's y los z
' s. Básicamente, tomas tantos a
's z
' o 'caben en el número y tomas lo que queda en la última letra de la siguiente manera:
code golf: 43.
Se adapta a 3 a
y le quedan 4:
aaa 4: j
result: aaaj
Sugerencia: Esta parte es básicamente divmod
excepto que se redondea hacia cero, no -infinity
(por ejemplo, -43 se convertiría en 3 z
's y' a ' -4
que es p
así zzzp
).
Nota: el guión no viene si el a
's o el z
' s encajan perfectamente, solo si es exactamente 0
.
Aclaraciones:
- El hash es caso en sensible
- Las lagunas estándar no están permitidas
- I / O puede estar en cualquier formato que no sea demasiado extravagante, stdin, stdout, arg de línea de comandos, función, etc.
- Este es el código de golf, por lo que gana el tamaño más corto en bytes .
Ejemplos:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
love
está vacío ...