Meu amigo e eu temos esse jogo que brincamos com palavras. É um passatempo divertido e envolve "cancelar" letras em uma palavra até que não haja mais nada. Estou realmente cansado de ele ser muito mais rápido do que eu, então é seu trabalho implementá-lo e me deixar finalmente vencê-lo. Obviamente, como eu tenho que tornar o programa o mais fácil possível de ocultar, ele deve ser o menor possível.
Como esse jogo funciona?
O jogo é um algoritmo bastante simples. Reduz uma sequência alfabética até que não possa mais ser reduzida, tornando-a uma espécie de hash. O jogo real que nós humanos fazemos é muito difícil de implementar, mas pode ser simplificado no seguinte algoritmo:
Você começa dobrando o alfabeto ao meio e alinhando as duas peças da seguinte maneira:
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
Então, começando do meio, você atribui os números inteiros positivos à metade superior e o negativo à 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
Então você pega sua string (nós estaremos usando hello world
) e ignorando quaisquer caracteres não alfabéticos, traduza-a:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
Então você soma os valores das letras. Os que alinharam no diagrama anterior (por exemplo, d
e w
, l
e o
) irá cancelar para fora, enquanto os outros vão somar.
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12 é o número para b
, então o hash de hello world
éb
Para uma palavra que anula completamente fora (por exemplo love
), você saída "0 caráter": -
. Observe que, na entrada, -
ainda será desconsiderado. Só importa na saída.
Se a magnitude do número é maior do que 13, então você começa a dobrar-se sobre os a
's eo z
' s Você basicamente ter como muitos a
's ou z
de ajuste para o número e tomar tudo o que está à esquerda para a última carta assim:
code golf: 43.
Cabe 3 a
e tem 4 sobras:
aaa 4: j
result: aaaj
Dica: Esta parte é, basicamente, divmod
excepto que arredonda para zero, não -infinity
(por exemplo, -43 iria tornar-se 3 z
's e um e -4
que é p
por isso zzzp
).
Nota: o traço não vem se os a
's z
' se encaixam perfeitamente, apenas se for exatamente 0
.
Esclarecimentos:
- O hash é caso em sensível
- As brechas padrão não são permitidas
- A E / S pode estar em qualquer formato que não seja muito estranho, stdin, stdout, arg da linha de comando, função etc.
- Esse é o código-golfe, para que o menor tamanho em bytes seja alcançado.
Exemplos:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
love
está vazia ...