Опис
Цезарський зсув - це дуже простий моноалфабетний шифр, де кожна буква замінюється на одну після неї в алфавіті. Приклад:
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
?