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


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

    >>> osmickova(654321)
        '237_5761'
    >>> osmickova(8888, 2)
        '2_12_70'
    

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

    >>> int('237_5761', 8)
        654321
    

  1. Napíš funkciu nahrad(zoznam, hodnota, postupnost), ktorá v zadanom zozname nahradí všetky prvky s danou hodnotou prvkami zadanej postupnosti. Napriklad:

    >>> zoz = list('python' * 2)
    >>> nahrad(zoz, 't', ())
    >>> zoz
        ['p', 'y', 'h', 'o', 'n', 'p', 'y', 'h', 'o', 'n']
    >>> z = [1, 2, 1, 3, 1, 2]
    >>> nahrad(z, 1, [2, 1, 1])
    >>> z
        [2, 1, 1, 2, 2, 1, 1, 3, 2, 1, 1, 2]
    >>> li = ['ab', 'c', 4, 'de', 'c']
    >>> nahrad(li, 'c', 'xyx')
    >>> li
        ['ab', 'x', 'y', 'x', 4, 'de', 'x', 'y', 'x']
    

  1. Nájdi najmenšie sedemciferné prvočíslo, ktoré má všetky cifry rôzne. Nájdené prvočíslo priraď do premennej prvocislo7. Keby sme hľadali takéto štvorciferné, bolo by to 1039. Zapíšeme to, napríklad takto:

    prvocislo7 = 1039
    

    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 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')
    
    def rek(x1, y1, x2, y2, d, f):
        if min(abs(x1-x2), abs(y1-y2)) > d:
            rek(x1, y1, x1+(x2-x1)//3, y1+(y2-y1)//3, d, f+1)
            rek(x2, y1, x2-(x2-x1)//2, y1+(y2-y1)//2, d, f+2)
            rek(x2, y2, x2-(x2-x1)//3, y2-(y2-y1)//3, d, f+3)
            rek(x1, y2, x1+(x2-x1)//2, y2-(y2-y1)//2, d, f+4)
        else:
            canvas.create_rectangle(x1, y1, x2, y2, fill=farba[f%len(farba)])
    

    Napríklad pre takéto volanie:

    rek(10, 20, 360, 250, 60, 0)
    

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

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

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


  1. Napíš funkciu dopln(tab), ktorej vstupný parameter je dvojrozmerná tabuľka (zoznam zoznamov). Funkcia doplní do každého riadku ďalšie prvky tak, aby mali rovnaký počet prvkov (podľa najdlhšieho riadku) - dopĺňa sa maximálna hodnota prvkov daného riadku. Funkcia nič nevracia, ale zmení len obsah vstupného parametra. Napríklad:

    >>> t = [[3, 1], ['a', 'c', 'b'], [5, 4, 3, 2, 1], [()]]
    >>> dopln(t)
    >>> t
        [[3, 1, 3, 3, 3], ['a', 'c', 'b', 'c', 'c'],
         [5, 4, 3, 2, 1], [(), (), (), (), ()]]
    

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

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

zrejme ako študenta uvedieš svoje meno.