Angelčin zapis
Lani so na Oddelku za gospodarstvo in motorni promet Mestne občine Ljubljana izvedel, da so študenti FRI razvili programsko opremo za branje njihovih zemljevidov pik in lojtr, zato so brž pripravili nov format zapisa. Tudi ta, novi zapis je že zastarel in ga lahko izbrskate le v lanski domači nalogi. Letos je gospa Angelca (tista z dolgimi nohti) prepričala (= z neumornim najedanjem od juter do večerov spravila v obup) ostale zaposlene na oddelku, namreč da je format grd in da bi ona ovire raje zapisovala tako:
(4) 5--
(13) 90----------- 5---- 19---
(5) 9--- 19-- 30-----
(4) 9---
(13) 22---- 17---
In da če jim ni prav, bo šla do župana, ker ta je edini pameten in se vedno strinja z njo. (Že čim jo zagleda na vratih pisarne. Župan ima pač početi kaj pametnejšega kot poslušati Angelco. Zadnje čase začne nezavedno kimati že, ko na hodniku zasliši zvok njenih visokih pet.)
Jasni Angelčin Opis Ovir (prepoznamo ga po končnici datoteke, .jaoo) je sestavljen tako:
Prva številka v vrstici pove številko vrstice na kolesarski stezi. Ta je zaprta v oklepaje, saj je tako najbolj logično.
Gornji primer torej podaja nekaj ovir v vrstici 4, nato nekaj v vrstici 13, pa ovire v vrstici 5, nato še nekaj ovir v vrstici 4 in še nekaj v 13. (Na ta način lahko dopisujejo naknadno dodane ovire preprosto na konec datoteke.)
Številki v oklepaju sledijo opisi ovir v podani vrstici. Ovira je opisana z začetno koordinato stolpca, sledi pa toliko minusov, kolikor je dolga ovira.
V četrti vrstici je le ena ovira: začne se v petem stolpcu in je dolga 2. V našem zapisu bi to bilo (5, 6, 4). V 13. vrstici so tri ovire; prva se začne v 90 in je dolga 11, se pravi (90, 100, 13). Druga se začne v 5 in je dolga 4, torej (5, 9, 8). Tretja je (19, 21, 13).
Da je zapis bolj razgiban (Angelca po osnovni izobrazbi pač ni računalnikarka, temveč je končala likovno akademijo, smer Industrijsko in unikatno oblikovanje), lahko vsebuje poljubno število presledkov na začetku ali koncu vrstice ter med navedbami posameznih ovir - tako kot jasno kaže gornji primer.
Disclaimer
Čeprav naloge pri tem predmetu temeljijo na resničnih dogodkih, avtor naloge ne ve, ali na MOL res obstaja kakšna Angelca, ki ustreza opisu, vendar te možnosti ne izključuje. Angelca v tej nalogi je torej izmišljena, podobnost z resničnimi osebami s takšnim ali, najbrž, drugačnim imenom pa povsem verjetna in celo nekoliko namerna.
Obvezna naloga
Napiši naslednje funkcije.
koordinate(s)
prejme opis ene ovire in vrne terko z njenimi koordinatami.Klic
koordinate("5---")
vrne(5, 7)
, saj gre za oviro, ki se začne v stolpcu 5 in konča v stolpcu 7 - dolga je namreč 3. Klickoordinate("123-")
vrne(123, 123)
.vrstica(s)
prejme niz z eno vrstico in vrne seznam trojk(x0, x1, y)
, ki predstavljajo ovire v tej vrstici.Klic
vrstica(" (4) 1--- 5------- 15-")
vrne seznam[(1, 3, 4), (5, 11, 4), (15, 15, 4)]
.preberi(s)
celoten, večvrstični niz z ovirami in vrne seznam ovir. Ovire naj bodo shranjene v takšnem vrstnem redu, v kakršnem se pojavljajo. (Priporočilo: večvrstični niz razbijte na vrstice ssplitlines()
, ne zsplit("\n")
. Ni isto.)Če jo pokličemo z gornjim nizom, vrne
[(5, 6, 4), (90, 100, 13), (5, 8, 13), (9, 11, 13), (9, 11, 5), (19, 20, 5), (30, 34, 5), (9, 11, 4), (22, 25, 13), (17, 19, 13)]
intervali(xs)
prejme seznam parov(x0, x1)
in vrne seznam nizov, ki opisujejo te intervale.Klic
intervali([(6, 10), (12, 12), (20, 22), (98, 102)])
vrne"6-----", "12-", "20---", "98-----"
.zapisi_vrstico(y, xs)
prejme številko vrstice in seznam parov(x0, x1)
. Vrniti mora opis ene vrstice.Klic
zapisi_vrstico(8, [(6, 10), (12, 12), (20, 22), (98, 102)])
vrne niz"(8) 6----- 12- 20--- 98-----"
. Pazi: ne dodajaj odvečnih presledkov. Angelca ni rekla, da so obvezni.
Dodatna naloga
Napiši funkcijo zapisi(ovire)
, ki prejme seznam ovir in vrne niz, ki vsebuje opis ovir v novi obliki. Za razliko od kaosa, ki ga dobimo od MOL, pa mora biti zapis urejen: vrstice se pojavljajo le enkrat in v pravem vrstnem redu, pa tudi ovire morajo biti urejene od leve proti desni.
Klic
zapisi([(5, 6, 4),
(90, 100, 13), (5, 8, 13), (9, 11, 13),
(9, 11, 5), (19, 20, 5), (30, 34, 5),
(9, 11, 4),
(22, 25, 13), (17, 19, 13)])
vrne niz
(4) 5-- 9---
(5) 9--- 19-- 30-----
(13) 5---- 9--- 17--- 22---- 90-----------
Spet: niz mora biti v točno takšni obliki, brez odvečnih ali manjkajočih presledkov.
Testi
- 6 November 2023, 9:06 AM