Beschreibung
Ein Caesar Shift ist eine sehr einfache monoalphabetische Chiffre, bei der jeder Buchstabe durch den Buchstaben nach dem Buchstaben im Alphabet ersetzt wird. Beispiel:
Hello world! -> IFMMP XPSME!
( IBSLR, EGUFV!
Ist die Ausgabe für die eigentliche Herausforderung, dies war ein Beispiel für die Verschiebung um 1.)
Wie Sie sehen können, bleiben Abstand und Interpunktion unbemerkt. Um jedoch zu verhindern, dass die Nachricht erraten wird, werden alle Buchstaben in Großbuchstaben geschrieben. Durch Zurückschieben der Buchstaben wurde die Nachricht entschlüsselt, bequem, aber auch von anderen Personen, die nicht wissen sollen, was die Nachricht bedeutet, wirklich leicht zu entschlüsseln.
Wir werden Caesar also ein wenig helfen, indem wir eine fortgeschrittene Form seiner Chiffre verwenden: den selbstverschiebenden Caesar Shift !
Herausforderung
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die bei einer zu verschlüsselnden Zeichenfolge die der Eingabe entsprechende verschlüsselte Zeichenfolge ausgibt. Der fortgeschrittene Caesar Shift funktioniert so:
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
Leerzeichen und andere spezielle Symbole, z. B. Satzzeichen, werden dabei übersprungen. Es ist garantiert, dass Ihr Programm eine Zeichenfolge erhält, die nur druckbare ASCII-Zeichen enthält. Die Ausgabe Ihrer Funktion / Ihres Programms darf nur in Großbuchstaben erfolgen.
Dies ist Codegolf , daher gelten Standardlücken, und es kann die kürzeste Antwort in Bytes gewinnen!
ZEN
zum Beispiel. Z
um 1 verschoben ist ... A
? (Als Randnotiz verwandelt sich die 05AB1E-Antwort Z
in A
)
RELIEF
und, RELIES
um beide zum gleichen Ergebnis zu verschlüsseln SRSFAG
?
E
-3
?