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


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 sestkova(cislo, skupiny=4), ktorá prevedie zadané číslo do šestkovej 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:

    >>> sestkova(654321)
        '2200_5133'
    >>> sestkova(8888, 2)
        '10_50_52'
    

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

    >>> int('10_50_52', 6)
        654321
    

  1. Napíš funkciu zoskup(zoznam), ktorá prvky zadaného zoznamu zoskupí do n-tíc (tuple) tak, že prvky v každej n-tici budú vo vzostupnom poradí. Zrejme tieto n-tice budú maximálnych dĺžok. Napríklad:

    >>> z = [3, 4, 5, 4, 6, 8, 8, 11, 11]
    >>> zoskup(z)
    >>> z
        [(3, 4, 5), (4, 6, 8), (8, 11), (11,)]
    >>> zoz = list('python')
    >>> zoskup(zoz)
    >>> zoz
        [('p', 'y'), ('t',), ('h', 'o'), ('n',)]
    

  1. Nájdi najväčšie šesťciferné prvočíslo, ktoré má všetky cifry rôzne. Nájdené prvočíslo priraď do premennej prvocislo6. Keby sme hľadali takéto trojciferné, bolo by to 983. Zapíšeme to, napríklad takto:

    prvocislo6 = 983
    

    Pre túto úlohu neodovzdávaj program, ale len hodnotu 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 obvodov všetkých obdĺžnikov podľa farieb. Funkcia by mala vrátiť n-ticu dvojíc (farba, celé číslo), ktoré zodpovedajú súčtom obvodov 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)//2, 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)//3, 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 (toto nie je správny výsledok pre posledné volanie):

    (('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 len_cisla(tab), vstupný parameter je dvojrozmerná tabuľka (zoznam zoznamov). Funkcia z tejto tabuľky vyhodí všetky prvky, ktoré nie sú čísla. Funkcia nič nevracia, ale len zmení obsah vstupného parametra. Napríklad:

    >>> tb = [[3, 4, ''], ['a', '5'], [1.1, 'c', 2]]
    >>> len_cisla(tb)
    >>> tb
        [[3, 4], [], [1.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ť:

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

zrejme ako študenta uvedieš svoje meno.