Analiza infrastrukture
Tokratna naloga je kratka: če ne štejemo glav funkcij (def ...
), morate napisati morate samo 10 vrstic, pa še eno za dodatno nalogo, če želite. In niti vrstice več.
Nekaj pravil in dovoljenih predpostavk v zvezi s to domačo nalogo.
- Tokrat morajo vse funkcije vsebovati le
return
. Za nekatere je potrebno uporabiti generatorske izraze oz. izpeljane sezname, množice, ali slovarje, nekatere pa je možno napisati še preprosteje. - Pisanje dodatnih funkcij je tokrat (izjemoma) prepovedano. Izdelek sme vsebovati le zahtevane funkcije. Dovoljena pa je uporaba dodatnih modulov, vendar le teh, ki jih dobimo s Pythonom, ne dodanih knjižnic,
- V tokratni nalogi je
zemljevid
slovar, ki že vsebuje povezave v obe smeri (razen v primeru, da je kolesarska dejansko enosmerna), ključi pa so že množice. Z drugimi besedami: klicobrnjen_zemljevid
ni več potreben. - V vseh funkcijah, razen
nove_povezave
inizvedljiva
, smeš predpostaviti, da vse povezave na poti obstajajo. - Vsaka podana pot vsebuje vsaj eno povezavo.
Obvezna naloga
Napiši naslednje funkcije:
nove_povezave(pot, zemljevid)
vrne množico povezav, ki so na podani poti, vendar na zemljevidu ne obstajajo.Klic
nove_povezave("ABVCDFE")
vrne{(V, C), (C, D), (F, E)}
, saj te tri povezave ne obstajajo.(MOL potrebuje takšno funkcijo, ker je 1. 4. 2023 namreč objavil novico o načrtovani gradnji novih kolesarskih povezav, pri kateri so se - po dolgi in napeti debati - odločili ravnati po potrebah kolesarjev.)
obiskane_tocke(pot)
vrne množico vseh točk, ki se pojavijo na poti.Klic
obiskane_tocke("ABVURURC")
vrne{A, B, C, R, U, V}
. )popravljena_pot(pot)
popravi napačno zapisano pot. Nekateri pot, sestavljeno iz, recimo odsekov A-B, B-C, C-R, R-I, I-E, namreč opišejo z"ABBCCRRIIE"
. Funkcijo mora to spraviti v običajni format.Klic
popravi_pot("ABBCCRRIIE")
vrne"ABCRIE"
.(Nekateri = Angelca. Itak.)
povezave_z_vescino(pot, zemljevid, vescina)
vrne seznam vseh povezav na podani poti, ki zahtevajo podano veščino. Vrstni red elementov mora biti enak vrstnemu redu na poti. Če se ista povezava pojavi večkrat na poti, mora biti tudi večkrat v seznamu.Klic
povezave_z_vescino("RUVRUTS", zemljevid, "pešci")
vrne[('R', 'U'), ('V', 'R'), ('R', 'U')]
.(Ker želi MOL pripraviti tematske poti za turiste.)
dolgocasna_pot(pot, zemljevid)
vrneTrue
, če pot vsebuje vsaj eno povezava, ki ne zahteva nobene veščine (inFalse
sicer).Klic
dolgocasna_pot("ABVUR")
vrneTrue
(zaradi povezave B-V ("brez veze")), klicdolgocasna_pot("AVUR")
pa vrneFalse
.(S funkcijo bo MOL lažje identificiral mesta, kjer je potrebno zvišati robnike, pustiti, da kolesarsko zaraste trava ali kaj podobnega. Kolesar, ki zeha, je zaspan in nepozoren, kar ogroža njegova varnost.)
dobra_pot(pot, zemljevid)
vrneTrue
, če zahtevajo vse povezave na poti vsaj dve veščini.Klic
dobra_pot("ABCR")
vrneTrue
, klicdobra_pot("ABCRDF")
paFalse
(ker zahtega R-D samo eno veščino.)(MOL potrebuje to in naslednjo funkcijo, da najde primerne poti za organizacijo dogodka "Kolesarimo po Ljubljani".)
zahtevnost_poti(pot, zemljevid)
vrne zahtevnost poti. Ta je enaka največjemu številu veščin, ki jih zahteva nek odsek na poti.Klic
zahtevnost_poti("ABCRU")
vrne 3, ker povezava C-R zahteva tri različne veščine - kar je največ, kar najdemo na tej pestri poti.izvedljiva(pot, zemljevid, zivljenj)
vrneTrue
, če je pot izvedljiva za kolesarja s podanim številom življenj inFalse
, če ni. Kolesar izgubi življenje, če vozi po povezavi, ki je ni na zemljevidu. Če kolesar konča pot z 0 življenji, je mrtev, torej pot zanj ni izvedljiva.Klic
izvedljiva("AVUSPRDEI", zemljevid, 3)
vrne 3, ker kolesar izgubi vsa tri življenja na U-S, P-R in D-E.(MOL potrebuje funkcijo za oblikovanje strokovnega priporočila o potrebnem številu življenj, ki naj jih ima kolesar, preden gre na pot v Ljubljani.)
enosmerne(zemljevid)
vrne množico povezav, ki so samo enosmerne.V običajnem zemljevidu takih povezav ni, zato klic
enosmerne(zemljevid)
vrne prazno množico. Klicenosmerne({(A, B): {"robnik", "bolt"}, (B, A): {"robnik", "bolt"}, (A, C): {"bolt", "rodeo", "pešci"}, (C, D): set(), (D, C): set(), (V, B): {"avtocesta"} })
pa vrne
{(A, C), (V, B)}
, ker gresta povezavi A-C in V-B le v eno smer.dvosmerne(zemljevid)
vrne nov slovar z zemljevidom, ki vsebuje le povezave, ki so dvosmerne.Klic
dvosmerne(zemljevid)
vrne enak zemljevid, kot ga je prejel. Klicdvosmerne
z gornjim zmeljevidom pa vrne{(A, B): {"robnik", "bolt"}, (B, A): {"robnik", "bolt"}, (C, D): set(), (D, C): set()}
Dodatna naloga
Samo ena funkcija, ki zahteva malo več (če nismo spretni, pa je malo bolj zapletena).
Napiši funkcijo najzahtevnejsi_odsek(pot, zemljevid)
, ki vrne tisti odsek na poti, ki zahteva največ veščin. Če je takih odsekov več, vrne tistega, ki se na poti pojavi prej.
Testi
- 21 November 2023, 5:16 PM