Descripción
Un César Shift es un cifrado monoalfabético muy simple en el que cada letra se reemplaza por la siguiente en el alfabeto. Ejemplo:
Hello world! -> IFMMP XPSME!
( IBSLR, EGUFV!
es la salida para el desafío real, este fue un ejemplo de desplazamiento por 1.)
Como puede ver, el espacio y la puntuación permanecen sin afinar. Sin embargo, para evitar adivinar el mensaje, todas las letras están en mayúscula. Al cambiar las letras hacia atrás, el mensaje fue descifrado, conveniente, pero también muy fácil de descifrar por otras personas que se supone que no saben lo que significa el mensaje.
Por lo tanto, estaremos ayudando a César un poco mediante el uso de una forma avanzada de su cifrado: ¡el Cambio de César con cambio propio !
Desafío
Su tarea es escribir un programa o función que, dada una cadena para cifrar, genere la cadena cifrada correspondiente a la entrada. El avanzado Caesar Shift funciona así:
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
Los espacios y otros símbolos especiales, como la puntuación, se omiten en este proceso. Se garantiza que su programa recibirá una cadena que solo contiene caracteres ASCII imprimibles. La salida de su función / programa solo debe estar en mayúscula.
Este es el código de golf , por lo que se aplican las lagunas estándar, ¡y que gane la respuesta más corta en bytes!
ZEN
, por ejemplo. Z
desplazado por 1 es ... A
? (como nota al margen, la respuesta 05AB1E se convierte Z
en A
)
RELIEF
y RELIES
para cifrar el mismo resultado SRSFAG
?
E
-3
?