Descrição
Um deslocamento de César é uma cifra monoalfabética muito simples, em que cada letra é substituída por uma depois do alfabeto. Exemplo:
Hello world! -> IFMMP XPSME!
( IBSLR, EGUFV!
é o resultado do desafio real, esse foi um exemplo de mudança de 1).
Como você pode ver, o espaçamento e a pontuação permanecem inalterados. No entanto, para evitar adivinhar a mensagem, todas as letras são maiúsculas. Ao mudar as cartas de volta, a mensagem foi decifrada, conveniente, mas também muito fácil de decifrar por outras pessoas que deveriam não saber o que significa a mensagem.
Então, ajudaremos César um pouco usando uma forma avançada de sua cifra: a mudança de César com mudança automática !
Desafio
Sua tarefa é escrever um programa ou função que, dada uma cadeia de caracteres para codificar, produza a cadeia de caracteres criptografada correspondente à entrada. O avançado Caesar Shift funciona assim:
1. Compute letter differences of all adjacent letters:
1.1. Letter difference is computed like this:
Position of 2nd letter in the alphabet
-Position of 1st letter in the alphabet
=======================================
Letter difference
1.2. Example input: Hello
H - e|e - l|l - l|l - o
7 - 5|5 - 12|12 - 12|12 - 15 Letter differences: 3; -7; 0; -3
=3| =-7| =0| =-3
2. Assign the letters continously a letter difference from the list,
starting at the second letter and inverting the differences:
2.1. 2nd letter: first difference, 3rd letter: second difference, etc.
2.2. The first letter is assigned a 1.
2.3. Example input: Hello with differences 3; -7; 0; -3
Letter || Value
=======||======
H || 1
E || -3
L || 7
L || 0
O || 3
3. Shift the letters by the value x they have been assigned:
3.1. In case of a positive x, the letter is shifted x letters to the right.
3.2. In case of a negative x, the letter is shifted |x| letters to the left.
3.3. In case of x = 0, the letter is not shifted.
3.4. If the shift would surpass the limits of the alphabet, it gets wrapped around
Example: Y + Shift of 2 --> A
3.5. Example input: See the table under 2.3.
|| || Shifted
Letter || Value || Letter
=======||=======||=========
H || 1 || I
E || -3 || B Program output:
L || 7 || S IBSLR
L || 0 || L
O || 3 || R
Espaços e outros símbolos especiais, como pontuação, são ignorados neste processo. É garantido que o seu programa receberá uma sequência contendo apenas caracteres ASCII imprimíveis. A saída da sua função / programa deve estar apenas em maiúsculas.
Isso é código-golfe , então as brechas padrão se aplicam e pode vencer a resposta mais curta em bytes!
ZEN
, por exemplo. Z
deslocado por 1 é ... A
? (como uma nota lateral, os 05AB1E resposta voltas Z
em A
)
RELIEF
e RELIES
para ambas codificar para o mesmo resultado SRSFAG
?
E
-3
?