Описание
Сдвиг Цезаря - это очень простой моноалфавитный шифр, в котором каждая буква заменяется буквой после алфавита. Пример:
Hello world! -> IFMMP XPSME!
( IBSLR, EGUFV!
это выход для реальной задачи, это был пример сдвига на 1.)
Как видите, интервалы и знаки препинания остаются ненастроенными. Однако, чтобы предотвратить угадывание сообщения, все буквы пишутся с большой буквы. Перемещая буквы назад, сообщение было расшифровано, удобно, но также очень легко расшифровывалось другими людьми, которые, как предполагается, не знают, что означает сообщение.
Итак, мы немного поможем Цезарю, используя усовершенствованную форму его шифра: Само-сдвигающийся Цезарь-Сдвиг !
Вызов
Ваша задача - написать программу или функцию, которая при наличии строки для шифрования выводит зашифрованную строку, соответствующую вводу. Продвинутый Цезарь Сдвиг работает так:
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
В этом процессе пропускаются пробелы и другие специальные символы, такие как знаки препинания. Гарантируется, что вашей программе будет задана строка, содержащая только печатные символы ASCII. Вывод вашей функции / программы должен быть только в верхнем регистре.
Это код-гольф , поэтому применяются стандартные лазейки, и пусть победит кратчайший ответ в байтах!
ZEN
, например. Z
смещено на 1 это ... A
? (как примечание, ответ 05AB1E превращается Z
в A
)
RELIEF
и RELIES
оба для шифрования с тем же результатом SRSFAG
?
E
-3
?