Шифр Юлія#2164

Шифр Юлія (Розбір)

Для розшифровки кожну букву слід змістити на позицій назад по колу. Пронумеруємо букви від ('') до ('').

Нехай — поточна буква шифру. Її номер в алфавіті обчислюється як - ''. Щоб виконати зсув назад з урахуванням циклічності алфавіту (перед '' йде ''), віднімемо і візьмемо остачу по модулю . Потім додамо '', щоб отримати ASCII-код розшифрованої букви.

Таким чином, операція дешифрування виглядає наступним чином:

s[i] = (s[i] - 'A' - k + 26)~\%~26 + 'A'

Реалізація алгоритму

Вхідний рядок збережемо в масиві символів .

char s[1000];

Читаємо вхідні дані.

gets(s); scanf("%d", &k);

Перетворюємо символи рядка згідно з правилом дешифрування.

for (i = 0; i < strlen(s); i++)
  s[i] = (((s[i] - 'A') + 26 - k) % 26) + 'A';

Виводимо розшифрований текст.

puts(s);

Реалізація алгоритму – STL

Читаємо вхідні дані.

cin >> s >> k;

Перетворюємо символи рядка згідно з правилом дешифрування.

for (i = 0; i < s.size(); i++)
  s[i] = (((s[i] - 'A') + 26 - k) % 26) + 'A';

Виводимо розшифрований текст.

cout << s << endl;

Python реалізація

Читаємо вхідні дані.

s = input()
k = int(input())

Перетворюємо символи рядка згідно з правилом дешифрування.

s = ''.join(chr(((ord(c) - ord('A') - k + 26) % 26) + ord('A')) 
                for c in s)

Виводимо розшифрований текст.

print(s)