Preskoči na glavno vsebino
Učilnica FRI 23/24
  • Domov
  • Več
Zapri
Preklopi iskalni vnos
Slovenščina ‎(sl)‎
English ‎(en)‎ Slovenščina ‎(sl)‎ Македонски ‎(mk)‎ Русский ‎(ru)‎ 한국어 ‎(ko)‎
Trenutno uporabljate gostujoči dostop
Prijavite se
Domov
Course Activities
Forumi Naloge Viri
Nedavno dostopani predmeti
You are not enrolled in any courses
  1. p1
  2. Kronometer

Kronometer

Zahteve zaključka
Rok za oddajo: ponedeljek, 11. december 2023, 11.15

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 (od 0 do, vključno, len(pribitkii) - 1)), ki bo prvi končal pot. Če ima enak najhitejši čas več kolesarjev, mora funkcija vrniti None.

Ocena 8

  • trening(pot, pribitki) vrne čas, ki ga kolesar potrebuje za podano pot - podobno kot funkcija cas. 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 slovar pribitki: 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

  • testi.py testi.py
    29. november 2023, 20:49
◄ Testi
Testi ►
Trenutno uporabljate gostujoči dostop (Prijavite se)
Pridobi mobilno aplikacijo Obvestilo o avtorskih pravicah
Stran poganja Moodle