2. Priebežný test z Programovania (1) v 2022 - variant C


Odovzdávaš len jeden skript test.py, v ktorom budú všetky tvoje riešenia úloh. V odovzdanom riešení nepoužívaj import a ani global. Svojim funkciám (oproti zadaniu) môžeš zmeniť mená parametrov.


  1. Napíš funkciu oprav(tabulka, n), ktorá zo zadanej dvojrozmernej tabuľky spraví štvorcovú tabuľka veľkosti n x n. Funkcia nič nevypisuje ani nevracia, len modifikuje vstupnú tabuľku.

    >>> t = [[], [1, 2, 3]]
    >>> oprav(t, 4)
    >>> print(*t, sep='\n')
        [0, 0, 0, 0]
        [1, 2, 3, 0]
        [0, 0, 0, 0]
        [0, 0, 0, 0]
    

    Zadefinuj:

    def oprav(tabulka, n):
        ...
    

  1. Dodefinuj metódy triedy:

    class Postupnost:
        ...
    

    tak, aby fungovalo:

    >>> a = Postupnost(1, 'a', 3)
    >>> type(a)
        <class '__main__.Postupnost'>
    >>> a
        (1, 'a', 3)
    >>> a.hodnota
        (1, 'a', 3)
    >>> a.hodnota = (3, 4, 5, 6)
        ...
        AttributeError: property 'hodnota' of 'Postupnost' object has no setter
    >>> b = Postupnost(3, 4, 5, 6)
    >>> a < b
        True
    >>> min(a, b, Postupnost(1, 'A', 3, 4))
        (1, 'A', 3, 4)
    

  1. Napíš funkciu vyrob(funkcia, postupnost), ktorá zo zadanej postupnosti hodnôt vytvorí množinu dvojíc (tuple). Každá takáto dvojica bude mať na prvom mieste funkciou spracovanú hodnotu a na druhom samotnú hodnotu z postupnosti. V tejto postupnosti môžu byť aj hodnoty, pre ktoré zadaná funkcia spôsobí chybu - tieto hodnoty sa budú ignorovať. Napríklad:

    >>> m = vyrob(str, range(5, 10))
    >>> m
        {('9', 9), ('8', 8), ('7', 7), ('5', 5), ('6', 6)}
    >>> vyrob(lambda x: x+1, (4, 'a', 5, 'c'))
        {(5, 4), (6, 5)}
    

    Zadefinuj:

    def vyrob(funkcia, postupnost):
        ...
    

  1. Napíš funkciu vyhod(podmienka, slovnik), ktorá z daného slovnika vyhodí všetky prvky (kľúče), pre ktoré je splnená zadaná podmienka. Funkcia správne spracuje aj chybové situácie, ktoré môžu vzniknúť počas volania podmienky, Napríklad:

    >>> d = {'a': 1, 2:'b', 'c':3, 4:'d'}
    >>> vyhod(lambda x: x in (2, 'c'), d)
    >>> d
        {'a': 1, 4: 'd'}
    

    Zadefinuj:

    def vyhod(podmienka, slovnik):
        ...
    

  1. Daná funkcia stvorce kreslí pomocou korytnačej grafiky nejakú rekurzívnu krivku. Každá nakreslená čiara je zafarbená jednou zo štyroch farieb. Prepíš túto funkciu tak, aby namiesto kreslenia čiar vrátila n-ticu počtov čiar jednotlivých farieb. Samozrejme, že pritom nepoužiješ tkinter:

    def stvorce(d, f=0):
        if d < 25:
            t.pencolor(('red', 'green', 'blue', 'yellow')[f%4])
            t.fd(d)
        else:
            for i, u in enumerate((80, 85, 88, 75)):
                stvorce(d*(.3, .5, .4, .35)[i], i)
                t.lt(u)
    

    Napríklad, by to malo fungovať takto:

    >>> t = stvorce(200)
    >>> t
        (14, 10, 12, 13)
    >>> stvorce(300)
        (23, 18, 22, 22)
    

    Uvedom si, že funkcia by mala správne fungovať aj pre viac spustení.


  1. V textovom súbore twain.txt sú slová oddelené medzerami, prípadne koncami riadkov. Nájdi čo najväčšiu n-ticu rôznych slov, ktoré sú všetky zložené z rovnakých písmen, pričom v niekotrých slovách sa niektoré písmená môžu objavovať aj viackrtá. Keďže takýchto n-tíc je v tomto súbore viac, nájdi čo najväčšiu skupinu slov z rovnakých písmen. Slová priraď do premennej slova. Napríklad, výsledkom by mohla byť trojica:

    slova = ('spirit', 'strip', 'spirits')
    

    vtedy, keby sme nepotrebovali nájsť čo najväčšiu skupinu slov. Ak je takých najväčších skupín slov viac, stačí priradiť ľubovoľnú z nich.



Riešenie odovzdaj v súbore test.py (môžeš si ho stiahnuť z L.I.S.T.u), pričom prvé tri riadky súboru budú obsahovať:

# 2C. priebezny test 2022
# student: Janko Hrasko
# datum: 13.12.2022

zrejme ako študenta uvedieš svoje meno.