Preskoči na glavno vsebino
Učilnica FRI 24/25
  • Domov
  • Več
Zapri
Preklopi iskalni vnos
Slovenščina ‎(sl)‎
English ‎(en)‎ Slovenščina ‎(sl)‎ Македонски ‎(mk)‎ Русский ‎(ru)‎ 한국어 ‎(ko)‎
Trenutno uporabljate gostujoči dostop
Prijavite se
Učilnica FRI 24/25
Domov
Razširi vse Skrči vse
  1. p1
  2. Izpeljani seznami, slovarji, množice; generatorji
  3. Ovire v vrstici

Ovire v vrstici

Zahteve zaključka
Rok za oddajo: ponedeljek, 25. november 2024, 11.15

Naloga se navezuje na nalogo Šikaniranje oziroma Lokacije ovir in bo zelo kratka. V vsaki funkciji bo potrebno napisati samo eno vrstico. Točneje, tokratna naloga bo krajša, ko bi si želeli: v vsaki funkciji boste smeli napisati samo eno vrstico. Vadimo namreč izpeljane sezname, množice in generatorje.

Funkcije se lahko kličejo med sabo, izjemoma pa ne smete pisati dodatnih funkcij, ki jih naloga ne zahteva.

Ovire bodo podane s seznamom trojk (y, x0, x1), ki predstavljajo vrstico ter začetni in končni stolpec z oviro. Seznam ni urejen in je lahko videti, recimo, tako

[(1, 3, 6),
 (1, 8, 10),
 (2, 1, 4),
 (3, 5, 8),
 (2, 7, 9),
 (7, 10, 10),
 (7, 12, 13),
 (5, 8, 10),
 (5, 1, 3),
 (2, 15, 19)]

Obvezna naloga

Napišite naslednje funkcije.

  • vrstice(ovire) vrne seznam vseh vrstic z ovirami. Vrstice so naštete v enakem vrstnem redu kot v seznamu in se lahko ponavljajo. Za gornji primer funkcija vrne [1, 1, 2, 3, 2, 7, 7, 5, 5, 2].
  • ovirane_vrstice(ovire) vrača podoben seznam, le da je urejen. Za gornji primer vrne [1, 1, 2, 2, 2, 3, 5, 5, 7, 7].
  • ovirane_vrstice_uni(ovire) vrne podoben seznam, le da se vrstice ne ponavljajo. Za gornji primer vrne [1, 2, 3, 5, 7]. (Namig: v množico.)
  • ovire_v_vrstici(ovire, vrstica) vrne množico začetkov in koncev vseh ovir v podani vrstici. Klic ovire_v_vrstici(ovire, 2) vrne {(1, 4), (7, 9), (15, 19)}.
  • stevilo_ovir(ovire, vrstica) vrne število ovir v podani vrstici.
  • dolzina_ovir(ovire) vrne skupno dolžino vseh ovir.
  • prosta_pot(ovire, stolpec) vrne True, če nobena od ovir ne zapira podanega stolpca, in False, če takšna ovira obstaja.

Dodatne naloge

Tole so naloge za študentko iz približno pete vrste in za vse druge, ki jih zanima, zakaj je potrebno pri

[<izraz> for <spremenljivka> in <seznam> if <pogoj>]

razmišljati drugače kot pri

s = []
for <spremenljivka> in <seznam>:
    if <pogoj>:
        s.append(<izraz>)

Naloge niso težke, morda pa so poučne. Da bodo še poučnejše, predlagam, da izmed funkcij, ki ste jih sprogramirali zgoraj, v spodnjih funkcijah kličete kvečjemu funkcijo ovirane_vrstice_uni. Morda bo še boljše, če vse funkcije najprej sprogramirate s klasično zanko, da boste videli, zakaj takšne zanke ne morete preprosto predelati v izpeljan slovar. (Spoiler: ker ne morete "updateati" vrednosti v slovarju, ki ga še ni.)

  • stevila_ovir(ovire) vrne slovar, katerega ključi so številke vrstic, ki vsebujejo vsaj eno oviro, vrednosti pa število ovir v tej vrstici.
  • zacetki(ovire) vrne slovar, katerega ključi so številke vrstic z vsaj eno oviro, vrednosti pa najbolj levi ovirani stolpec.
  • ovire_po_vrsticah(ovire) vrne slovar, katerega ključi so številke vrstic z vsaj eno oviro, vrednosti pa množice začetkov in koncev ovir v tej vrstici.

Testi

  • testi.py testi.py
    19. november 2024, 11:13
Trenutno uporabljate gostujoči dostop (Prijavite se)
Pridobi mobilno aplikacijo
Stran poganja Moodle
Obvestilo o avtorskih pravicah