Lokacije ovir

Rok za oddajo: sreda, 9. november 2022, 11.15

Če imate kaj radi asistente, ki bodo popravljali tole nalogo, upoštevajte tole navodilo: oddani program naj se začne s prirejanjema zemljevid = [....tu pridejo podatki...] in nato ovire = [...podatki...] (drugo je potrebno le, če rešujete tudi dodatno nalogo). Program naj le izpiše seznam (za obvezni del) in zemljevid (če rešujete tudi dodatni del). Nobenih drugih izpisov, nobenih inputov. To bo omogočilo napisati program, ki bo spreminjal vaš program, tako da mu bo sam podajal različne podatke in opazoval rezultat.


MOL je poslal zemljevid ovir na kolesarski poti. Zemljevid je shranjen kot seznam nizov, ki predstavljajo "vrstice": # predstavlja oviro, . pa prosto pot.

Ker smo prejšnji teden napisali program, ki sprejme opis ovir kot seznam trojk (x0, x1, y), bi radi pretvorili MOLov zemljevid v takšno obliko.

Ogrevalna naloga

Napiši program, ki se začne z opisom ovire v eni vrstici, na primer

ovire = ".##..####...##"

Program mora izpisati seznam parov, ki predstavljajo začetke in konce ovir. Za gornjo postavitev je to [(2, 3), (6, 9), (13, 14)]. Ne spreglej, da koordinate niso opisane po "Pythonovsko": prvi stolpec ima indeks 1 in obe meji sta vključeni ((6, 9) pokriva tudi vrstico 9, torej vsebuje 4 #).

Program obvezno preskusi na nizih ".##..####...##" in ##..#...# (ki se pretvori v [(1, 2), (5, 5), (9, 9)]). Pazi: v podatkih morajo biti napisani nizi v točno takšni obliki. Tu ne dodajaj ničesar na začetel ali konec; če želiš, pa lahko to kasneje naredi program sam.

Obvezna naloga

Napiši program, ki prejme celotni zemljevid in izpiše seznam ovir, kot smo ga vajeni iz prejšnje naloge. Če zemljevid definiramo z

zemljevid = [
    "......",
    "..##..",
    ".##.#.",
    "...###",
    "###.##",
]

mora izpisati [(3, 4, 2), (2, 3, 3), (5, 5, 3), (4, 6, 4), (1, 3, 5), (5, 6, 5)].

Pazi, tudi vrstice so oštevilčene od 1.

Dodatna naloga

Naredi obratno: napiši program, ki na podlagi seznama ovir izpiše zemljevid. Podatki naj bodo zapisani v spremenljivki ovire, na primer

ovire = [(3, 4, 2), (2, 3, 3), (5, 5, 3), (4, 6, 4), (1, 3, 5), (5, 6, 5)]

Ta del prilepi pod obvezni del. Lahko preprosto pretvoriš pravkar izračunani seznam nazaj.