Zemljevid ovir
Completion requirements
Due: Monday, 6 November 2023, 11:00 AM
Naloga vsebuje teste. Naloga je rešena samo, če prestane vse teste. Poglej navodila za poganjanje testov.
MOL je poslal zemljevid ovir na kolesarski poti. Zemljevid je shranjen kot seznam nizov, ki predstavljajo "vrstice": #
predstavlja oviro, .
pa prosto pot. Tipičen primer korektno zašikanirane kolesarske steze je
zemljevid = [
"......",
"..##..",
".##.#.",
"...###",
"###.##",
]
Vsi nizi so enako dolgi.
Napiši naslednje funkcije. (Tokrat ni dodatnega dela, vse je obvezno. Navsezadnje imate dva tedna. :)
dolzina_ovir(vrstica)
prejme eno vrstico, na primer".##.####...##."
in vrne skupno dolžino ovir, torej, število znakov#
(v tem primeru 8).stevilo_ovir(vrstica)
prejme vrstico in vrne število ovir v vrstici. Za gornji primer mora vrniti 3, saj imamo najprej eno dvojno šikano, nato eno četverno in potem spet eno dvojno - skupaj tri.najsirsa_ovira(vrstica)
vrne dolžino najdaljše ovire. V gornjem primeru je to 4.pretvori_vrstico(vrstica)
vrne seznam parov(x0, x1)
, ki predstavljajo začetke in konce ovir. Za gornji primer vrne[(2, 3), (5, 8), (12, 13)]
. Pazi, stolpci so oštevilčeni od 1, ne 0.pretvori_zemljevid(vrstice)
prejme celoten zemljevid, kot ga vidimo v uvodnem delu naloge, in vrne seznam trojk(x0, x1, y)
, ki predstavljajo ovire. Za gornji zemljevid mora vrniti[(3, 4, 2), (2, 3, 3), (5, 5, 3), (4, 6, 4), (1, 3, 5), (5, 6, 5)]
. Seznam naj bo urejen po vrsticah in znotraj tega po stolpcih (tako kot v primeru). Pazi, tudi vrstice so oštevilčene od 1, ne 0.izboljsave(prej, potem)
prejme dva zemljevida - en je starejši, drugi novejši. Funkcija mora vrniti seznam novo postavljenih ovir; tudi ta mora biti urejen po vrsticah in znotraj tega po stolpcih. Mirno smeš predpostaviti, da MOL ne odstranjuje postavljenih ovir, temveč jih zgolj dodaja. Prav tako nobena ovira ni "razširjena"; nove ovire niso postavljene neposredno levo ali desno od obstoječih. Predpostaviti smeš tudi, da nova kolesarska steza ni širša. (No, tudi ožja ne; enake oblike je.)huligani(prej, potem)
; zgodi se, da pridejo huligani in kradejo ovire ter s tem ogrožajo varnost kolesarjev. Funkcijahuligani
naj zato vrne dva seznama: seznam vseh novih in seznam vseh odstranjenih ovir. Tu se lahko zgodi, da se nova ovira delno prekriva z neko prejšnjo.
Testi
- 21 October 2023, 5:58 PM