1. Priebežný test z Programovania (1) z 2021


Odovzdavaš 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 permutuj(zoznam, permutacia), ktorá daný zoznam preusporiada podľa zadanej permutácie (ľubovoľná postupnosť čísel od 0 do n-1). Funkcia nič nevracia, ale zmení prvky vstupného parametra.

    def permutuj(zoznam, permutacia):
        ...
    

    Napríklad:

    >>> zoz = [11, 22, 33, 44]
    >>> permutuj(zoz, (2, 3, 0, 1))
    >>> zoz
        [33, 44, 11, 22]
    

  1. Napíš funkciu dve_prvocisla(vzdialenost, pocet), ktorá nájde najmenšie dve prvočísla, ktorých vzdialenosť (rozdiel) je zadaná hodnota vzdialenost a pritom medzi týmito dvoma prvočíslami je zadaný pocet prvočísel. Funkcia dvojice prvočísel hľadá len do 100000, pričom keď také nenájde, vráti None.

    def dve_prvocisla(vzdialenost, pocet):
        ...
        return None
    

    Napríklad:

    >>> dve_prvocisla(10, 3)
        (3, 13)
    >>> dve_prvocisla(10, 1)
        (19, 29)
    

    Snaž sa premyslieť prácu s prvočíslami, nakoľko testovač bude túto funkciu spúšťať viackrát s rôznymi parametrami.


  1. Daný viacriadkový reťazec v každom riadku obsahuje slová oddelené medzerou. Napíš funkciu uprav(text), ktorá s takýmto textom urobí nasledovnú úpravu: ak posledné slovo v riadku končí znakom '-', prenesie ho do ďalšieho riadku, kde ho prilepí (už bez '-') k prvému slovu v tomto riadku (všetky riadky sú neprázdne). Funkcia opäť vráti viacriadkový reťazec.

    def uprav(text):
        ...
        return ''
    

    Napríklad:

    >>> text = '''Stojí stojí mohy-
         la Na mohyle zlá chví-
          ľa na mohyle tŕnie chrastie
           a v tom tŕní chras-
            tí rastie rastie kvety rozví-
        ja'''
    >>> print(uprav(text))
        Stojí stojí
         mohyla Na mohyle zlá
          chvíľa na mohyle tŕnie chrastie
           a v tom tŕní
            chrastí rastie rastie kvety
        rozvíja
    

    Všimni si, že funkcia zachováva úvodné medzery v každom riadku.


  1. Napíš funkciu pocet_rovnakych(meno_suboru1, meno_suboru2):, ktorá zistí počet „skoro“ rovnakých riadkov v oboch textových súboroch. Každý súbor obsahuje riadky so slovami, ktoré sú oddelené aspoň jednou medzerou. Funkcia postupne porovnáva zodpovedajúce si riadky (prvý s prvým, druhý s druhým, …) a zisťuje, koľko z nich sú skoro rovnaké, teda obsahujú rovnaké slová, ale možno v inom poradí:

    def pocet_rovnakych(meno_suboru1, meno_suboru2):
        ...
        return 0
    

    Napríklad, ak dva súbory sú:

    Stojí stojí mohyla
    na mohyle zlá chvíľa
    
    Stojí STOJÍ mohyla
    zlá chvíľa na mohyle
    

    potom :

    >>> pocet_rovnakych('text1.txt', 'text2.txt')
        1
    

  1. Napíš funkciu nahanacka(postupnost, dlzka), ktorá odsimuluje naháňanie sa n hráčov na ploche. V parametri postupnost funkcia dostáva počiatočné súradnice (x, y) všetkých hráčov. Samotná naháňačka sa bude simulovať v krokoch. V každom kroku sa postupne každý hráč presunie o 1/10 vzdialenosti k svojmu nasledujúcemu hráčovi, pričom posledný hráč v postupnosti bude prenasledovať prvého. V každom kroku simulácie bude funkcia počítať súčet prejdených dráh všetkých hráčov. Ak je tento súčet menší ako zadaná dlzka, simulácia končí a funkcia vráti počet takto zrealizovaných krokov simulácie:

    def nahanacka(postupnost, dlzka):
        ...
        return 0
    

    Napríklad:

    >>> nahanacka(((10, 30), (50, 250), (350, 50)), 30)
        9
    >>> nahanacka(((10, 30), (50, 250), (350, 50), (300, 200)), 5)
        28
    

    V tejto úlohe nesmieš použiť tkinter ani turtle. Testovač bude akceptovať aj približný počet krokov simulácie.


  1. Napíš funkciu stvorce(d), ktorá vypočíta dĺžku všetkých nakreslených čiar takejto rekurzívnej krivky: rekurzívna krivka sa skladá zo štvorca so stranou d, v ktorom sa v každom vrchole štvorca nakreslí táto istá rekurzívna krivka, ale postupne s veľkosťami d*0.6, d*0.5, d*0.4, d*0.3. Rekurzia by pre d < 5 nemala kresliť nič (triviálny prípad).

    def stvorce(d):
        ...
        return 0
    

    Napríklad:

    >>> round(stvorce(10))
        84
    >>> round(stvorce(20))
        321
    

    Ani v tejto úlohe nesmieš použiť tkinter ani turtle. Testovač bude akceptovať aj približnú vypočítanú nakreslenú dĺžku.


  1. Napíš funkciu usporiadaj(zoznam), ktorá dostáva ako parameter dvojrozmerný zoznam. V tomto zozname môžu mať riadky rôznu dĺžku. Funkcia preusporiada riadky vstupného súboru podľa dĺžok riadkov tak, že na začiatku zoznamu budú najkratšie a na konci najdlhšie. Funkcia nič nevracia, len zmení hodnotu parametra zoznam.

    def usporiadaj(zoznam):
        ...
    

    Napríklad:

    >>> zoz = [[1, 2], [3], [4, 5, 6], [7]]
    >>> usporiadaj(zoz)
    >>> zoz
        [[3], [7], [1, 2], [4, 5, 6]]
    >>> zoz = [[9, 10], [7, 8], [5, 6], [3, 4], [1, 2]]
    >>> usporiadaj(zoz)
    >>> zoz
        [[9, 10], [7, 8], [5, 6], [3, 4], [1, 2]]
    

  1. Napíš funkciu ocisluj(tab), ktorá dostáva ako parameter dvojrozmernú tabuľku s riadkami rovnakej dĺžky. Funkcia prejde všetky prvky tabuľky po špirále a postupne ich očísluje hodnotami 0, 1 a 2. Číslovanie začne v ľavom dolnom prvku tabuľky (prvý prvok posledného riadku), pokračuje smerom nahor (kým sa dá), potom pokračuje smerom vpravo (kým sa dá), potom nadol a na záver vľavo. Takto to opakuje so stale zmenšujúcimi sa dĺžkami úsekov. Pri číslovaní teda strieda hodnoty 0 - 1 - 2.

    def ocisluj(tab):
        ...
    

    Napríklad:

    >>> t = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
    >>> ocisluj(t)
    >>> for riadok in tab:
            print(riadok)
        [2, 0, 1, 2]
        [1, 1, 2, 0]
        [0, 0, 2, 1]
    >>> tt = [[None] * 10]
    >>> ocisluj(tt)
    >>> tt
        [[0, 1, 2, 0, 1, 2, 0, 1, 2, 0]]
    

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

# 1. priebezny test 2021
# student: Janko Hrasko
# datum: 8.11.2022

zrejme ako študenta uvedieš svoje meno.