====== HW03 - Caesarova šifra ======
^ Termín odevzdání | 21.11.2021 23:59 CET |
^ Bodový zisk | 5b |
^ Počet uploadů | 10 |
===== Zadání =====
Naším úkolem je rozluštit zprávu zakódovanou [[https://en.wikipedia.org/wiki/Caesar_cipher|Caesarovou šifrou]], která funguje na principu záměny písmene z abecedy za písmeno posunuté o pevně určený počet míst. V našem případě máme k dispozici nejen zašifrovaný text, ale také nespolehlivě odposlechnuté originální znění zprávy, tj. některé znaky originální zprávy jsou chybně zapsány. Řešení tak můžeme založit na testování všech možností kódování Caesarovou šifrou a porovnání s odposlechnutým textem. Posun s největší shodou dekódovaného textu s odposlechnutou zprávu budeme považovat za správný a takto dekódovaný text je náš požadovaný výstup. Obecně nemusí tento postup vést na unikátní správné řešení, nicméně v testovaných případech vždy existuje unikátní řešení.
Použitá abeceda se skládá pouze z malých a velkých písmen bez diakritiky, tj. znaky v rozsahu [a-zA-Z].
===== Vstup =====
Ve vstupním souboru, jehož jméno je programu předáno jako argument příkazové řádky, očekávejte dvě posloupnosti znaků (texty) na samostatných řádcích. První text je zakódovaná zpráva a druhý text je nespolehlivě odposlechnutý text.
* Pokud vstupní text neodpovídá abecedě [a-zA-Z] vypíše program na standardní výstup "''Error: Chybny vstup!''" a skončí.
* Pokud mají texty různou délku, program vypíše na "''Error: Chybna delka vstupu!''" a skončí.
* Pokud nastanou obě chyby současně, program vypíše pouze chybovou hlášku "''Error: Chybny vstup!''" a skončí.
* Všechny chybové hlášky jsou ukončeny znakem konce řádku.
===== Výstup =====
Do výstupního souboru ''output.txt'' vypište dekódovanou zprávu jako posloupnost znaků bez znaku konce řádku.
Nahrávaný soubor pojmenujte **main.py**.
===== Příklady =====
==== Příklad 1 ====
V prvním příkladu je zašifrován text "''Helloworld''". Posun je zde o 42 písmen. (16 míst je mezi 'h' a 'x'; 26 pak mezi malými a velkými písmeny). Zašifrovaný text je tedy "''xUbbemehbT''".
Odposlechnutý text může být například "''??lloworld''", kde písmena na místě otazníku špatně odposlechneme a dostaneme jiné náhodné písmeno, například "''XYlloworld''".
^ Vstup ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
xUbbemehbT
XYlloworld
|
Helloworld
| žádný |
Příklad vyhodnocení. Největší počet shodných písmen (8/10) má posun o 10, proto jej vyhodnotíme jako správný výsledek.
00: xUbbemehbT ~ XYlloworld > 0 correct letters
01: yVccfnficU ~ XYlloworld > 0 correct letters
02: zWddgogjdV ~ XYlloworld > 1 correct letters
03: AXeehphkeW ~ XYlloworld > 0 correct letters
04: BYffiqilfX ~ XYlloworld > 1 correct letters
05: CZggjrjmgY ~ XYlloworld > 0 correct letters
06: DahhksknhZ ~ XYlloworld > 0 correct letters
07: Ebiiltloia ~ XYlloworld > 1 correct letters
08: Fcjjmumpjb ~ XYlloworld > 0 correct letters
09: Gdkknvnqkc ~ XYlloworld > 0 correct letters
10: Helloworld ~ XYlloworld > 8 correct letters -- result
11: Ifmmpxpsme ~ XYlloworld > 0 correct letters
12: Jgnnqyqtnf ~ XYlloworld > 0 correct letters
...
50: vSZZckcfZR ~ XYlloworld > 0 correct letters
51: wTaadldgaS ~ XYlloworld > 0 correct letters
52: xUbbemehbT ~ XYlloworld > 0 correct letters
==== Příklad 2 ====
^ Vstup ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
mnoXYhnJLJ
JCudvgtXRi
|
studentPRP
| žádný |
==== Příklad 3 ====
^ Vstup ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
fghQRa-CEC
scbdeMKARZ
| žádný | Error: Chybny vstup!
^
==== Příklad 4 ====
^ Vstup ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
fghQRa
scbdeMK
| žádný |
Error: Chybna delka vstupu!
|