Kronometer
Razlike v hitrosti kolesarjev ne izhajajo toliko iz njihovih hitrosti po normalnem terenu kot iz njihove spretnosti. Konkretno, kolesar za vsako povezavo potrebuje 4
časovne enote + pribitek zaradi različnih ovir. Pribitki so različni za vsakega kolesarja. Opisani so v slovarju; če so pri nekem konkretnem kolesarju pribitki enake {"črepinje": 2, "bolt": 4, "stopnice": 1, "pešci": 5}
, bo za povezavo, ki zahteva veščini črepinje in pešci potreboval 4 + 2 + 5 = 11 časovnih enot.
V vseh funkcijah uporabljaj (globalno) spremenljivko zemljevid
. (Torej, v funkciji mirno uporabljaj zemljevid
, kot da bi ga funkcija dobila kot argument.) Zemljevid bo vseboval povezave v obe smeri (ključa (A, B)
in (B, A)
). Pripadajoče vrednosti bodo množice veščin, kot smo navajeni.
Argument pribitki
je vedno slovar, ki pove, koliko pribitka na čas povzroči posamezna veščina. Vsi kolesarji so veterani ljubljanskih kolesarskih poti in torej obvladajo vse potrebne veščine. Vse povezave na poti bodo vedno obstajale.
Ocena 6
cas_za_povezavo(povezava, pribitki)
naj vrne čas, ki ga kolesar potrebuje za podano povezavo.cas(pot, pribitki)
vrne čas, ki ga kolesar potrebuje za podano pot.povezava_spotike(pribitki)
vrne tisto povezavo na zemljevidu (npr. terko(R, I)
, ki kolesarju vzame največ časa. Če je takšnih več, vrne tisto, ki je zadnja po abecedi (in obrnjena tako, da je zadnja po abecedi, recimo(M, I)
in ne(I, M)
. (Glede tega se ne vznemirjaj preveč; zgodilo se bo samo od sebe.))
Ocena 7
urnik(pot, pribitki)
vrne slovar, katerega ključi so točke, ki jih kolesar obišče, pripadajoče vrednosti pa časi (od začetka poti), ko je kolesar prvič v tej točki.skupinski_sport(pot, pribitkii)
za razliko od ostalih funkcij ne prejme slovarja pribitki temveč seznam takšnih slovarjev (seznam vsebuje vsaj en element). Gre namreč za to, da gre na pot cela skupina kolesarjev. Ker so uvidevni, se na vsakem križišču počakajo. Funkcija mora vrniti čas, ki ga bo skupina potrebovala za podano pot.tekma(pot, pribitkii)
prav tako dobi seznam slovarjev, vrniti pa mora indeks kolesarja (od0
do, vključno,len(pribitkii) - 1
)), ki bo prvi končal pot. Če ima enak najhitejši čas več kolesarjev, mora funkcija vrnitiNone
.
Ocena 8
trening(pot, pribitki)
vrne čas, ki ga kolesar potrebuje za podano pot - podobno kot funkcijacas
. Razlika je v tem, da se kolesar trenira: vsakič, ko uporabi določeno veščino, se čas, ki ga bo zanjo potreboval prihodnjič, zmanjša za 5 %. Funkcija mora vrniti čas in poleg tega tudi dejansko spremeniti slovarpribitki
: po klicu funkcije morajo biti vrednosti v njem ustrezno manjše.zastavice(pot, pribitkii)
simulira igro, v kateri sodeluje poljubno število kolesarjev. Vsak kolesar ima svoje pribitke, zato funkcija prejme seznam slovarjev z pribitki. Na vsakem križišču je zastavica. Kolesar, ki prvi pride v križišče pobere zastavico (in ostali, ki pridejo v križišče, ne dobijo ničesar). Funkcija naj vrne seznam, ki ima toliko elementov, kolikor je tekmovalcev: i-ti element pove, koliko zastavic je pobral i-ti tekmovalec.Če prideta dva kolesarja v križišče istočasno, dobi zastavico tisti z manjšim indeksom. Tough luck.
Kolesarji poberejo tudi zastavico v prvem križišču. Dobi jo pač ... tisti z najmanjšim indeksom.
Ocena 9
Lenuh vozi po Ljubljani tako, da se v vsakem koraku preprosto odloči za povezavo, ki mu bo vzela najmanj časa. Če je takšnih povezav več, gre v točko, ki je prej po abecedi. Edini pravili sta, da nikoli ne gre po povezavi, po kateri je ravnokar prišel in da nikoli ne gre v slepo ulico (torej v točko, ki ima samo eno povezavo, saj bi to pomenilo, da bi kršil prejšnje pravilo in se vračal po isti povezavi). Seveda se bo izkazalo, da se bo prej ko slej zaciklal. :)
Za potrebe te naloge smeš predpostaviti, da na zemljevidu ni slepih ulic (začasno sta odstranjeni točki E in O.)
cikel(zacetna_tocka, pribitki)
vrne dolžino cikla. Če se kolesar zacikla tako, da v nedogled ponavlja RDFGIRDFGIRDFGI, je dolžina cikla 5. (V dolžino cikla seveda niso vštete točke, ki jih je prevozil, preden se je zaciklal.)
Pazi: ko se kolesar prvič znajde v točki, v kateri je že bil, to še ne pomeni, da se je zaciklal.
Ocena 10
Tekmovanje, ki ga simulira zastavice, je tako zapleteno, da smo izgleda narobe razumeli navodila. Tekmovanje v resnici deluje na izpadanje. Na vsakem križišču je zastavica. Vsak kolesar ima svojo pot in svoje pribitke. Ko kolesar pride na križišče, vzame zastavico. (To velja tudi za križišče, v katerem začne pot.) Če zastavice na križišču ni več, pa izpade - ne nadaljuje poti, ne pobira novih zastavic. Če istočasno pride v križišče več kolesarjev, pobere zastavico kolesar z najmanjšim indeksom; ostali so izločeni
izpadanje(poti, pribitkii)
prejme seznam poti in seznam pribitkov. Vrniti mora seznam indeksov izpadlih kolesarjev, urejenih po vrstnem redu izpadanja. Če istočasno izpadeta dva kolesarja, mora biti manjši indeks zapisan pred večjim.
Kolesar, ki prevozi svojo predvideno pot, ne da bi izpadel, ni izpadel. Ostanejo lahko torej vsi kolesarji. Lahko pa se zgodi tudi, da vsi izpadejo.
Testi
- 29. november 2023, 20:49