09_kontrola - ocena 10
This commit is contained in:
parent
3b7295f5c6
commit
7652318932
|
@ -23,7 +23,7 @@ def check(x: int, y: int, c: str, zemljevid: list[str], prepovedani: set = None)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def najblizji_distance(x: int, y: int, c: str, zemljevid: list[str], prepovedani: set):
|
def najblizji_distance(x: int, y: int, c: str, zemljevid: list[str], prepovedani: set = None):
|
||||||
d = 1
|
d = 1
|
||||||
max_d = len(zemljevid) + len(zemljevid[0])
|
max_d = len(zemljevid) + len(zemljevid[0])
|
||||||
|
|
||||||
|
@ -152,3 +152,41 @@ def najboljsa_cetrt(a: int, zemljevid: list[str]):
|
||||||
max_y = y
|
max_y = y
|
||||||
|
|
||||||
return max_x, max_y
|
return max_x, max_y
|
||||||
|
|
||||||
|
|
||||||
|
def dosegljive(x, y, max_d, max_n, zemljevid):
|
||||||
|
def dosegljive_r(x, y, n, prepovedani):
|
||||||
|
if zemljevid[y][x] == "*":
|
||||||
|
n = max_n
|
||||||
|
else:
|
||||||
|
if n == 0:
|
||||||
|
return set()
|
||||||
|
prepovedani.add((x, y))
|
||||||
|
|
||||||
|
points = set()
|
||||||
|
|
||||||
|
accessible = set()
|
||||||
|
for d in range(1, max_d + 1):
|
||||||
|
x -= 1
|
||||||
|
ry = 0
|
||||||
|
ry_inc = 1
|
||||||
|
for rx in range(d * 2 + 1):
|
||||||
|
xx = x + rx
|
||||||
|
y1 = y - ry
|
||||||
|
y2 = y + ry
|
||||||
|
if check(xx, y1, "", zemljevid, prepovedani) and (zemljevid[y1][xx] != "*" or n < max_n):
|
||||||
|
accessible.add((xx, y1))
|
||||||
|
if check(xx, y2, "", zemljevid, prepovedani) and (zemljevid[y2][xx] != "*" or n < max_n):
|
||||||
|
accessible.add((xx, y2))
|
||||||
|
if ry == d:
|
||||||
|
ry_inc = -1
|
||||||
|
ry += ry_inc
|
||||||
|
|
||||||
|
points.update(accessible)
|
||||||
|
for x, y in accessible:
|
||||||
|
points.update(dosegljive_r(x, y, n - 1, prepovedani))
|
||||||
|
return points
|
||||||
|
|
||||||
|
tocke = dosegljive_r(x, y, max_n, set())
|
||||||
|
|
||||||
|
return {(x, y) for x, y in tocke if zemljevid[y][x] != "*"}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user