2. Priebežný test 2023 - 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 z_pozicii(slovnik), ktorá zo zadaného slovníka pozícií vytvorí dvojrozmernú tabuľku minimálnych rozmerov. Kľúčami slovníka sú dvojice (riadok, stĺpec) a vyjadrujú pozíciu nejakej hodnoty v tabuľke. Takto nedefinované hodnoty budú mať hodnotu None. Napríklad:

    >>> sl = {(1, 3): 7, (0, 2): 'a', (2, 0): 3.14, (1, 1): 0}
    >>> tab = z_pozicii(sl)
    >>> print(*tab, sep='\n')
        [None, None, 'a', None]
        [None, 0, None, 7]
        [3.14, None, None, None]
    


  1. Daná funkcia strom kreslí pomocou korytnačej grafiky rekurzívnu krivku. Táto krivka sa skladá z úsečiek rôznej celočíselnej dĺžky. Prepíš túto funkciu tak, aby namiesto kreslenia čiar vrátila slovník počtov dĺžok jednotlivých úsečiek (pre každú dĺžku úsečky si zaznačí počet jej výskytov v krivke). Samozrejme, že pritom nepoužiješ turtle:

    def strom(d, min=8):
        t.pd()
        t.fd(d)
        if d > min:
            t.lt(40)
            strom(int(d * .7), min)
            t.rt(90)
            strom(int(d * .8), min)
            t.lt(50)
        t.pu()
        t.fd(-d)
    

    Napríklad, by to malo fungovať takto:

    >>> t = strom(17)
    >>> t
        {17: 1, 11: 1, 7: 3, 8: 2, 13: 1, 9: 1, 6: 1, 10: 1}
    

    Teda, čiara dĺžky 7 sa nakreslila trikrát, dĺžky 8 dvakrát a ostatné dĺžky len raz.

    Uvedom si, že funkcia by mala správne fungovať aj pre viac spustení (nielen pre prvé, ktoré ti možno zmení nejakú globálnu premennú).


  1. V textovom súbore (napríklad 'dobs.txt') sú slová oddelené medzerami, prípadne koncami riadkov. Napíš funkciu daj_podobne(meno_suboru, slovo), ktorá v takomto súbore vyhľadá všetky slová, ktoré sú zložené z tých istých písmen, ako zadané slovo, prípadne v jeho množine písmen jedno chýba. Funkcia vráti množinu takýchto slov. Napríklad:

    >>> daj_podobne('dobs.txt', 'desiata')
        {'desat', 'sadit', 'sediet', 'tesia', 'dietata', 'stastie', 'dieta'}
    

  1. Dodefinuj metódy triedy:

    class Postupnost:
        ...
    

    tak, aby fungovalo:

    >>> a = Postupnost(1, 'a', 3)   # ľubovoľne dlhá postupnosť hodnôt
    >>> a
        (1, 'a', 3)
    >>> a.hodnota
        (1, 'a', 3)
    >>> type(a.hodnota)
        <class 'tuple'>
    >>> a.hodnota = (1, 2)
        ...
        AttributeError: property 'hodnota' of 'Postupnost' object has no setter
    >>> b = Postupnost(3, 4, 5, 6)
    >>> a < b
        True
    >>> a < Postupnost(1, 'A', 3, 4)
        False
    

  1. Napíš funkciu maxima(*cisla), ktorá vráti zoznam maximálnych cifier: prvé číslo je maximálna prvá cifra, druhé maximálna druhá cifra, … Ak má niektoré z čísel menej cifier, ako ostatné, potom chýbajúce cifry (od začiatku) budeme považovať za 0. Napriklad:

    >>> maxima(162, 23, 416, 70)
        [4, 7, 6]
    >>> maxima(0, 0, 0, 0, 0, 0, 0, 0)
        [0]
    >>> maxima(5, 40, 300, 2000, 10000)
        [1, 2, 3, 4, 5]
    

  1. Napíš mapovaciu funkciu mapuj(postupnost, *funkcie), ktorá aplikuje jednotlivé funkcie na prvky zadanej postupnosti. Ak je funkcií menej ako prvkov postupnosti, tak sa tieto funkcie striedajú cyklicky. Napríklad:

    >>> mapuj(range(10, 50, 10), lambda x: x//2, lambda x: x+7)
        [5, 27, 15, 47]
    >>> mapuj((2, 3, 5, 7, 11))   # prázdna postupnosť funkcií
        [2, 3, 5, 7, 11]
    >>> mapuj('Python', str.lower, str.upper, ord)
        ['p', 'Y', 116, 'h', 'O', 110]
    


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 2023
# student: Janko Hrasko
# datum: 12.12.2023

zrejme ako študenta uvedieš svoje meno.