HW03 - Caesarova šifra

Termín odevzdání 30.10.2022 23:59 CET
Bodový zisk 6b

Zadání

Naším úkolem je rozluštit zprávu zakódovanou 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].

Odevzdání

Do systému BRUTE odevzdávejte soubor pojmenovaný caesar.py. V tomto souboru bude funkce dekoduj(sifrovany, odposlechnuty). První parametr je zakódovaná zpráva a druhý parametr je nespolehlivě odposlechnutý text.

Vstup

  • Pokud některý z argumentů funkce 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

Výstupem je návratová hodnota funkce v podobě dekódované zprávy jako posloupnosti znaků bez znaku konce řádku. Pokud při běhu programu došlo k chybě, návratová hodnota funkce je None.

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
mnoXYhnTLJ
JCudvgtXRi
studentZRP
žá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!
courses/bab37zpr/hw/hw03.txt · Last modified: 2022/10/31 10:43 by viteks