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.
Napíš funkciu
permutuj(zoznam, permutacia)
, ktorá daný zoznam preusporiada podľa zadanej permutácie (ľubovoľná postupnosť čísel od0
don-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]
Napíš funkciu
dve_prvocisla(vzdialenost, pocet)
, ktorá nájde najmenšie dve prvočísla, ktorých vzdialenosť (rozdiel) je zadaná hodnotavzdialenost
a pritom medzi týmito dvoma prvočíslami je zadanýpocet
prvočísel. Funkcia dvojice prvočísel hľadá len do100000
, pričom keď také nenájde, vrátiNone
.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.
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.
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
Napíš funkciu
nahanacka(postupnost, dlzka)
, ktorá odsimuluje naháňanie san
hráčov na ploche. V parametripostupnost
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 o1/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
aniturtle
. Testovač bude akceptovať aj približný počet krokov simulácie.
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 stranoud
, v ktorom sa v každom vrchole štvorca nakreslí táto istá rekurzívna krivka, ale postupne s veľkosťamid*0.6
,d*0.5
,d*0.4
,d*0.3
. Rekurzia by pred < 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
aniturtle
. Testovač bude akceptovať aj približnú vypočítanú nakreslenú dĺžku.
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 parametrazoznam
.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]]
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 hodnotami0
,1
a2
. Čí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 hodnoty0
-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: 31.10.2024
zrejme ako študenta uvedieš svoje meno.