102 lines
2.0 KiB
Python
102 lines
2.0 KiB
Python
def pravilna(povezava):
|
|
x0, y0, x1, y1 = povezava
|
|
# preveri dolzino
|
|
prekratka = (abs(x1-x0) + abs(y1-y0)) > 0
|
|
|
|
# preveri, da je vodoravna ali navpicna in ne diagonalna
|
|
diagonalna = (x0 == x1) or (y0 == y1)
|
|
|
|
return prekratka and diagonalna
|
|
|
|
def pravilne(povezave):
|
|
for i in povezave:
|
|
if not pravilna(i):
|
|
return False
|
|
|
|
return True
|
|
|
|
def urejena(povezava):
|
|
x0, y0, x1, y1 = povezava
|
|
|
|
if x1 < x0 or y1 < y0:
|
|
return x1, y1, x0, y0
|
|
|
|
return povezava
|
|
|
|
def na_povezavi(x, y, povezava):
|
|
x0, y0, x1, y1 = urejena(povezava)
|
|
|
|
return x0 <= x <= x1 and y0 <= y <= y1
|
|
|
|
def povezave_tocke(x, y, povezave):
|
|
r = set()
|
|
|
|
for i in povezave:
|
|
if na_povezavi(x, y, i):
|
|
r.add(urejena(i))
|
|
|
|
return r
|
|
|
|
def generiraj_tuples_povezava(povezava):
|
|
pov = []
|
|
z0 = None
|
|
z1 = None
|
|
|
|
x0, y0, x1, y1 = povezava
|
|
|
|
if x0 == x1:
|
|
z0 = y0
|
|
z1 = y1
|
|
else:
|
|
z0 = x0
|
|
z1 = x1
|
|
|
|
for ipsilon in range(z0, z1 + 1):
|
|
r = (x0, ipsilon)
|
|
pov.append(r)
|
|
|
|
return pov
|
|
|
|
def secisce(povezava1, povezava2):
|
|
if not pravilna(povezava1) and not pravilna(povezava2): return None
|
|
|
|
povezava1 = urejena(povezava1)
|
|
povezava2 = urejena(povezava2)
|
|
|
|
pov1 = generiraj_tuples_povezava(urejena(povezava1))
|
|
pov2 = generiraj_tuples_povezava(urejena(povezava2))
|
|
|
|
|
|
|
|
|
|
|
|
print(povezava1)
|
|
print(pov1)
|
|
|
|
|
|
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),
|
|
]
|
|
# 6
|
|
# print(pravilna((18, 5, 13, 5)))
|
|
# print(pravilna((5, 18, 5, 13)))
|
|
# print(pravilna((10, 18, 12, 4)))
|
|
# print(pravilna((10, 18, 10, 18)))
|
|
|
|
# na_povezavi(10, 19, (10, 22, 10, 20))
|
|
|
|
# print(povezave_tocke(3, 15, povezave))
|
|
|
|
print(secisce((10, 20, 10, 25), (8, 22, 18, 22)))
|
|
# print(secisce((8, 20, 18, 20), (1, 25, 0, 25)))
|
|
|
|
main() |