1. Priebežný test z Programovania (1) v 2023 - variant A


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 prvky Pythonu, ktoré sme sa neučili v prvých 13. prednáškach. Svojim funkciám (oproti zadaniu) môžeš zmeniť mená parametrov.


  1. Napíš funkciu dvojkova(cislo, skupiny=4), ktorá prevedie zadané číslo do dvojkovej sústavy (vráti znakový reťazec), pričom vloží znak '_' medzi skupiny cifier zadanej veľkosti. Takéto skupiny cifier by sa mali tvoriť od konca reťazca. Napríklad:

    >>> dvojkova(1234)
        '100_1101_0010'
    >>> dvojkova(567, 6)
        '1000_110111'
    >>> dvojkova(444, 2)
        '1_10_11_11_00'
    

    Výsledok môžeš odkontrolovať štandardnou funkciou int, ktorá má druhý parameter číselnú sústavu, napríklad:

    >>> int('100_1101_0010', 2)
        1234
    

  1. Napíš funkciu zip(it1, it2), ktorá dostane ako parametre dve iterovateľné postupnosti (prvky sa dajú prechádzať for-cyklom). Funkcia z týchto dvoch postupností vytvorí jednu postupnosť dvojíc. V nej budú nachádzať prvky prvej a druhej vstupnej postupnosti. Ak je nejaká z týchto postupností kratšia ako druhá, tak sa prvky tej kratšej budú opakovať od začiatku. Napríklad:

    >>> zip(range(3), 'pyton')
        ((0, 'p'), (1, 'y'), (2, 't'), (0, 'o'), (1, 'n'))
    >>> zip('x'*6, [1, 2])
        (('x', 1), ('x', 2), ('x', 1), ('x', 2), ('x', 1), ('x', 2))
    

  1. Nájdi najmenšie dve za sebou idúce prvočísla (medzi nimi už nie je žiadne ďalšie), ktorých rozdiel je presne 100. Priraď ich do premennej prvocisla100. Ak by sme hľadali dve prvočísla s rozdielom 10, zrejme by to boli 139 a 149. Riešenie zapíš napríklad takto:

    prvocisla100 = 139, 149
    

    Pre túto úlohu neodovzdávaj program, ale len dve hodnoty priradené do premennej.


  1. Rekurzívna funkcia rek() nakreslí rôzne veľké farebné obdĺžniky. Prerob túto funkciu tak, aby nekreslila obdĺžniky, ale zistila súčet obsahov všetkých obdĺžnikov podľa farieb. Funkcia by mala vrátiť n-ticu dvojíc (farba, celé číslo), ktoré zodpovedajú súčtom obsahov podľa jednotlivých farieb (dvojice môžu byť v ľubovoľnom poradí). Funkcia:

    farba = ['blue', 'red', 'yellow', 'green']
    
    def rek(x1, y1, x2, y2, d):
        if min(abs(x1-x2), abs(y1-y2)) > d:
            rek(x1, y1, x1+(x2-x1)//3, y1+(y2-y1)//3, d)
            rek(x2, y1, x2-(x2-x1)//2, y1+(y2-y1)//2, d)
            rek(x2, y2, x2-(x2-x1)//3, y2-(y2-y1)//3, d)
            rek(x1, y2, x1+(x2-x1)//2, y2-(y2-y1)//2, d)
        else:
            canvas.create_rectangle(x1, y1, x2, y2, fill=farba[0])
            farba.append(farba.pop(0))
    

    Napríklad pre takéto volanie:

    rek(10, 20, 360, 250, 50)
    

    Výstup vašej funkcie by mohol vyzerať takto:

    (('blue', 10), ('red', 20), ('yellow', 30), ('green', 40))
    

    Funkcia by mala správne fungovať aj pre iný počet farieb v premennej farba.


  1. Napíš funkciu max(tab), ktorej vstupný parameter je dvojrozmerná tabuľka (zoznam zoznamov). Prvkami sú buď len čísla alebo len reťazce. Funkcia nájde maximálny prvok (prvý výskyt) a vráti jeho pozíciu ako dvojicu (riadok, stĺpec). Napríklad:

    >>> max([['d', 'ac', 'Z'], ['x', 'AX', 'x']])
        (1, 0)
    >>> max([[], [1, 2, 3, 2], []])
        (1, 2)
    

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ť:

# 1A. priebezny test 2023
# student: Janko Hrasko
# datum: 14.11.2023

zrejme ako študenta uvedieš svoje meno.