Zkouška 23.01.2023

Jednotlivé funkce (včetně případných podpůrných) pište do jednoho souboru pojmenovaného {login}.py a nahrajte do BRUTE (ZK).


1. [6 bodů] Napište funkci, která vykreslí ASCII artový objekt - lodičku. Funkce má tří parametry:

  1. šířka poloviny dolní strany plachty, která je v intervalu <3,10>
  2. znak, kterým je kreslena
  3. příznak, zda je dolní část vyplněna.

Paluba je vždy libovolně delší, než plachta, výška lodičky odpovídá čtvrtině celkové délky spodní hrany plachty (celočíselně).

Příklad:

def priklad1 (sirka, znak, vyplnit = True)
    # vase implementace
    pass
 
priklad1 (10, 'X')
 
             X X
            XX XX
           XXX XXX
          XXXX XXXX
         XXXXX XXXXX
        XXXXXX XXXXXX
       XXXXXXX XXXXXXX
      XXXXXXXX XXXXXXXX
     XXXXXXXXX XXXXXXXXX
    XXXXXXXXXX XXXXXXXXXX
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXX
  XXXXXXXXXXXXXXXXXXXXXXXXX
   XXXXXXXXXXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXXXXXXXX 
 
priklad1 (9, 'O', False)
 
 
            O O
           OO OO
          OOO OOO
         OOOO OOOO
        OOOOO OOOOO
       OOOOOO OOOOOO
      OOOOOOO OOOOOOO
     OOOOOOOO OOOOOOOO
    OOOOOOOOO OOOOOOOOO
 
OOOOOOOOOOOOOOOOOOOOOOOOOOOO
 O                        O
  O                      O
   OOOOOOOOOOOOOOOOOOOOOO 

2. [8 bodů] Napište funkci, která provede Burrowsovu–Wheelerovu transformaci. Princip transformace spočívá v tom, že se provedou všechny možné rotace zadaného textu (včetně ukončovacího znaku) a tyto dílčí rotace se lexikograficky seřadí. Výstupem tranformace je pak řada posledních písmen jednotlivých rotací. Funkce ověří, že na vstupu je textový řetězec ukončený znakem ^ - pokud tomu tak není, vhodným způsobem ukončí činnost (např. výjimka).

Příklad:

def priklad2 (text)
    # vase implementace
    pass
 
priklad2 ('BANANA^')
 
rotace:
BANANA^
^BANANA
A^BANAN
NA^BANA
ANA^BAN
NANA^BA
ANANA^B
 
serazeno:
ANANA^B
ANA^BAN
A^BANAN
BANANA^
NANA^BA
NA^BANA
^BANANA
 
vysledek:
BNN^AAA

3. [6 bodů] Napište funkci, který provede kódování pomocí Vigenèrovy šifry. Šifrování probíhá posunem písmen podobně jako u Caesarovy šifry s tím rozdílem, že Vigenèrova šifra využívá klíč. Pro posun písmen zdrojového textu se postupně používají písmena z klíče: a posouvá o 0, b o 1, … z o 25. Pokud je klíč kratší než zdrojový text, jsou použita písmena z klíče opět od začátku. Znaky zdrojového textu jsou z množiny A-Za-z, klíč je pouze z malých písmen. Návratovou hodnotou funkce je tuple - prvním členem je logická hodnota True, pokud nedošlo k chybě nebo False při nesprávně zadaných argumentech funkce, druhým členem je hodnota None nebo zakódovaný řetězec.

Příklad:

def priklad3 (text, klic):
    # vase implementace
    pass
 
# priklad volani
ret = funkce3 ('PAMPELISKA', 'klic')
# overeni vysledku
print (ret)
# (True, "ZLUROWQUUL")

courses/bab37zpr/zkouska/01.txt · Last modified: 2023/01/23 09:24 by viteks