Opis
Przesunięcie Cezara jest bardzo prostym szyfrem monoalfabetycznym, w którym każda litera jest zastępowana kolejną literą w alfabecie. Przykład:
Hello world! -> IFMMP XPSME!
( IBSLR, EGUFV!
jest wynikiem rzeczywistego wyzwania, był to przykład przesunięcia o 1)
Jak widać, odstępy i interpunkcja pozostają nienaruszone. Aby jednak nie zgadywać wiadomości, wszystkie litery są pisane wielkimi literami. Przesuwając litery z powrotem, wiadomość została odszyfrowana, wygodna, ale także bardzo łatwa do odczytania przez inne osoby, które powinny nie wiedzieć, co oznacza wiadomość.
Pomożemy więc trochę Cezarowi, wykorzystując zaawansowaną formę jego szyfru: Samokierującą się zmianę Cezara !
Wyzwanie
Twoim zadaniem jest napisanie programu lub funkcji, która podając ciąg encipherowi, wyprowadza zaszyfrowany ciąg odpowiadający wejściu. Zaawansowana zmiana Cezara działa w następujący sposób:
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
W tym procesie pomijane są spacje i inne specjalne symbole, takie jak interpunkcja. Gwarantujemy, że program otrzyma ciąg znaków zawierający tylko drukowalne znaki ASCII. Dane wyjściowe funkcji / programu muszą być pisane tylko wielkimi literami.
To jest golf golfowy , więc obowiązują standardowe luki i może wygrać najkrótsza odpowiedź w bajtach!
ZEN
, na przykład. Z
przesunięty o 1 to ... A
? (na marginesie, odpowiedź 05AB1E zmienia się Z
w A
)
RELIEF
i RELIES
oba, aby uzyskać ten sam wynik SRSFAG
?
E
-3
jest