ocena 7 - fin

This commit is contained in:
Martin Vrhovšek 2024-12-07 16:11:04 +01:00
parent da5ef18537
commit 4cbbe0392d

View File

@ -1,7 +1,10 @@
def razdalja_povezava(x0, y0, x1, y1):
return abs(x1-x0) + abs(y1-y0)
def pravilna(povezava):
x0, y0, x1, y1 = povezava
# preveri dolzino
prekratka = (abs(x1-x0) + abs(y1-y0)) > 0
prekratka = razdalja_povezava(x0, y0, x1, y1) > 0
# preveri, da je vodoravna ali navpicna in ne diagonalna
diagonalna = (x0 == x1) or (y0 == y1)
@ -72,28 +75,31 @@ def secisce(povezava1, povezava2):
return None
def urejeni_povezavi(povezava1, povezava2):
x0_1, y0_1, x1_1, y1_1 = urejena(povezava1)
x0_2, y0_2, x1_2, y1_2 = urejena(povezava2)
pov1 = urejena(povezava1)
pov2 = urejena(povezava2)
x0_1, y0_1, x1_1, y1_1 = pov1
x0_2, y0_2, x1_2, y1_2 = pov2
if x0_1 < x0_2:
return povezava1, povezava2
return pov1, pov2
elif x0_2 < x0_1:
return povezava2, povezava1
return pov2, pov1
if y0_1 < y0_2:
return povezava1, povezava2
return pov1, pov2
elif y0_2 < y0_1:
return povezava2, povezava1
return pov2, pov1
if x1_1 < x1_2:
return povezava1, povezava2
return pov1, pov2
elif x1_2 < x1_1:
return povezava2, povezava1
return pov2, pov1
if y1_1 < y1_2:
return povezava1, povezava2
return pov1, pov2
elif y1_2 < y1_1:
return povezava2, povezava1
return pov2, pov1
# sigurno ne bosta dve identični povezavi prileteli sem? :D
if x0_1 == x0_2 and y0_1 == y0_2: return None
@ -129,13 +135,9 @@ def krizisca(povezave):
return krizisce
def mozna_pot(pot, mreza):
povezave_obstajajo = True
for povezava in pot:
# dobimo urejeno povezavo
pov = urejena(povezava)
obstaja_pot = False
# preverimo če obstaja povezava v mreži
@ -149,68 +151,38 @@ def mozna_pot(pot, mreza):
return False
# to be continued, preveriti moramo še če se vse povezave stikajo skupaj
for i in range(0, len(pot)):
# preverjamo trenutno povezavo z naslednjo, zato
if i + 1 == len(pot): break
if secisce(pot[i], pot[i+1]) is None: return False
return True
def razdalja(pot, mreza):
skupna_razdalja = 0
povezava1, povezava2 = urejeni_povezavi(pot[0], pot[1])
sec = mreza[(povezava1, povezava2)] # ker imamo zagotovilo v navodilih, da ima pot vsaj dve povezavi
print(povezava1, povezava2)
for i in range(2, len(pot)):
# ker gledamo i za 1 vnaprej (torej tudi naslednjo pot)
if i + 1 == len(pot): break
x0, y0 = sec
povezava1, povezava2 = urejeni_povezavi(pot[i], pot[i+1])
trenutno_sec = mreza[(povezava1, povezava2)]
x1, y1 = trenutno_sec
skupna_razdalja += razdalja_povezava(x0, y0, x1, y1)
sec = trenutno_sec
return skupna_razdalja
def main():
povezave = [
(11, 10, 13, 10),
(2, 12, 8, 12),
(6, 11, 6, 13),
(0, 16, 10, 16),
(3, 18, 3, 13),
(7, 14, 3, 14),
(9, 17, 9, 14),
]
pov = [
(11, 10, 13, 10),
(2, 12, 8, 12),
(6, 11, 6, 13),
(0, 16, 10, 16),
(3, 18, 3, 13),
(7, 14, 3, 14),
(9, 17, 9, 14),
(13, 15, 8, 15),
(12, 14, 12, 17),
(13, 16, 21, 16),
(14, 18, 14, 15),
(13, 15, 13, 16),
(16, 16, 16, 10),
(16, 10, 21, 10),
(14, 18, 10, 18),
(11, 13, 11, 20),
(15, 13, 22, 13),
(17, 15, 17, 17),
(18, 17, 18, 14),
(19, 19, 22, 19),
(20, 15, 20, 17),
(21, 10, 21, 19),
]
mreza = krizisca(pov)
print("Mreža:\n")
for i, j in mreza.items():
print(f"{i}: {j}")
print("\n")
klic = mozna_pot(
[(14, 18, 10, 18),
(14, 18, 14, 15),
(13, 16, 21, 16),
(13, 16, 13, 15),
(8, 15, 13, 15),
(9, 14, 9, 17),
(10, 16, 0, 16),
(9, 14, 9, 17),
(8, 15, 13, 15),
(13, 16, 13, 15)], mreza)
#print(klic)
print()
main()