Problem #47
Tags:
strings
classical
cryptography
c-0
popular-algorithm
Ak si myslíte, že tento problém je pre vás príliš ľahký, vyskúšajte tiež Prelomenie Cézarovej Šifry!
Kryptografia je jedno z najzaujímavejších odvetví programovania. Učenia sa algoritmov zvyčajne začína s jednoduchou metódou nazvanou po slávnom Rímskom cisárovi Júliusovi Cézarovi, ktorý ju používal pre zašifrovanie jeho vojenských tajomstiev (a možno aj na posielanie zamilovaných listov Kleopatre).
My si v tejto úlohe vyskúšame dešifrovanie zašifrovaných správ.
Princíp algoritmu je jednoduchý. Každé písmeno originálneho textu je nahradené iným, podľa nasledujúceho pravidla:
K
pozícií ďalej (dole v abecede);Napríklad, ak K = 3
(hodnota posunu používaná samotným Cézarom), potom sa A
stane D
, B
sa stane E
, W
sa stane Z
a
Z
sa stane C
a tak ďalej, podľa nasledujúcej tabuľky:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
| | | | | | | | | | | | | | | | | | | | | | | | | |
V V V V V V V V V V V V V V V V V V V V V V V V V V
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Takže, ak pôvodná správa bola VENI VIDI VICI tak po zašifrovaní dostaneme YHQL YLGL YLFL.
Na druhej strane by zašifrovaná správa mala byť "posunutá naspäť" aby mohla byť dekódovaná - alebo posunutá o 26 - K
, čo je to isté.
Takže ak máme zakódovanú správu HYHQ BRX EUXWXV, môžeme použiť posun o 26 - K = 26 - 3 = 23
a získať pôvodnú
správu naspäť, v tomto prípade to bude EVEN YOU BRUTUS (AJ TY BRUTUS).
Vstupné dáta budú obsahovať 2 celé čísla - počet riadkov zašifrovaného kódu a hodnotu K
.
Nasledujúce riadky budú obsahovať zašifrovaný text, pozostávajúci z veľkých latinských písmen A ... Z
,
každý riadok končí bodkou .
ktorá by nemala byť dešifrovaná.
Odpoveď by mala obsahovať dešifrovanú správu (v jednom riadku, žiadne rozdeľovanie nie je treba).
Príklad:
vstupné dáta:
2 3
YHQL YLGL YLFL.
HYHQ BRX EUXWXV.
odpoveď:
VENI VIDI VICI. EVEN YOU BRUTUS.