2023-12-27 10:53:28 +02:00
|
|
|
#!/usr/bin/env python3.12
|
|
|
|
|
|
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
class Koht:
|
|
|
|
|
x: int
|
|
|
|
|
y: int
|
|
|
|
|
|
|
|
|
|
|
2023-12-15 11:17:25 +02:00
|
|
|
def checksouth(x, y):
|
2023-12-27 10:53:28 +02:00
|
|
|
print("south")
|
|
|
|
|
if x < (len(ruum) - 1):
|
|
|
|
|
print('poleservastyle')
|
|
|
|
|
if ruum[x + 1][y] in ("|JL") and leitud[x + 1][y] == " ":
|
|
|
|
|
print("south")
|
|
|
|
|
return [Koht(x+1,y)]
|
|
|
|
|
return []
|
2023-12-15 11:17:25 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def checknorth(x, y):
|
2023-12-27 10:53:28 +02:00
|
|
|
print("north")
|
2023-12-15 11:34:12 +02:00
|
|
|
if x > 0:
|
2023-12-27 10:53:28 +02:00
|
|
|
print('poleservastyle')
|
|
|
|
|
if ruum[x - 1][y] in ("|7F") and leitud[x - 1][y] == " ":
|
|
|
|
|
print("north")
|
|
|
|
|
return [Koht(x - 1, y)]
|
|
|
|
|
return []
|
2023-12-15 11:17:25 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def checkwest(x, y):
|
2023-12-27 10:53:28 +02:00
|
|
|
print("west")
|
2023-12-15 11:34:12 +02:00
|
|
|
if y > 0:
|
2023-12-27 10:53:28 +02:00
|
|
|
print('poleservastyle')
|
|
|
|
|
if ruum[x][y - 1] in ("-LF") and leitud[x][y - 1] == " ":
|
|
|
|
|
print("west")
|
|
|
|
|
return [Koht(x, y - 1)]
|
|
|
|
|
return []
|
2023-12-15 11:17:25 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def checkeast(x, y):
|
2023-12-27 10:53:28 +02:00
|
|
|
print("east")
|
|
|
|
|
if y < (len(ruum[x]) - 1):
|
|
|
|
|
print('poleservastyle')
|
|
|
|
|
if ruum[x][y + 1] in ("-J7") and leitud[x][y + 1] == " ":
|
|
|
|
|
print("east")
|
|
|
|
|
return [Koht(x, y + 1)]
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ruumikorvalon(x, y):
|
|
|
|
|
vastus = []
|
|
|
|
|
if ruum[x][y] == "S":
|
|
|
|
|
vastus = checknorth(x, y) + checksouth(x, y) + checkwest(x, y) + checkeast(x, y)
|
2023-12-15 11:17:25 +02:00
|
|
|
if ruum[x][y] == "|":
|
2023-12-27 10:53:28 +02:00
|
|
|
vastus = checknorth(x, y) + checksouth(x, y)
|
2023-12-15 11:17:25 +02:00
|
|
|
if ruum[x][y] == "-":
|
2023-12-27 10:53:28 +02:00
|
|
|
vastus = checkeast(x, y) + checkwest(x, y)
|
2023-12-15 11:17:25 +02:00
|
|
|
if ruum[x][y] == "L":
|
2023-12-27 10:53:28 +02:00
|
|
|
vastus = checknorth(x, y) + checkeast(x, y)
|
2023-12-15 11:17:25 +02:00
|
|
|
if ruum[x][y] == "J":
|
2023-12-27 10:53:28 +02:00
|
|
|
vastus = checknorth(x, y) + checkwest(x, y)
|
2023-12-15 11:17:25 +02:00
|
|
|
if ruum[x][y] == "F":
|
2023-12-27 10:53:28 +02:00
|
|
|
vastus = checksouth(x, y) + checkeast(x, y)
|
2023-12-15 11:17:25 +02:00
|
|
|
if ruum[x][y] == "7":
|
2023-12-27 10:53:28 +02:00
|
|
|
vastus = checksouth(x, y) + checkwest(x, y)
|
|
|
|
|
return vastus
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def otsing(x, y):
|
|
|
|
|
mitmes = 0
|
|
|
|
|
kasonveel = True
|
|
|
|
|
vajateha = [Koht(x, y)]
|
|
|
|
|
while kasonveel:
|
|
|
|
|
kasonveel = False
|
|
|
|
|
jargmised = []
|
|
|
|
|
for i in vajateha:
|
|
|
|
|
print(i)
|
|
|
|
|
leitud[i.x][i.y] = str(mitmes)
|
|
|
|
|
print(f"mitmes on praegu {mitmes}")
|
|
|
|
|
jargmised += ruumikorvalon(i.x, i.y)
|
|
|
|
|
if len(jargmised)> 0:
|
|
|
|
|
kasonveel = True
|
|
|
|
|
else:
|
|
|
|
|
print(f"Vastus on {mitmes}")
|
|
|
|
|
vajateha = jargmised.copy()
|
|
|
|
|
#kuva(leitud)
|
|
|
|
|
mitmes += 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def kuva(n):
|
|
|
|
|
for i in n:
|
|
|
|
|
print("#" + "".join(i) + "#")
|
|
|
|
|
print()
|
2023-12-11 19:05:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
with open("data.txt") as file:
|
|
|
|
|
lines = [line.rstrip() for line in file]
|
|
|
|
|
|
|
|
|
|
ruum = []
|
2023-12-15 11:17:25 +02:00
|
|
|
leitud = []
|
2023-12-11 19:05:07 +02:00
|
|
|
for line in lines:
|
|
|
|
|
ruum.append([*line])
|
2023-12-27 10:53:28 +02:00
|
|
|
leitud.append([" "] * len(line))
|
2023-12-11 19:05:07 +02:00
|
|
|
|
|
|
|
|
|
2023-12-27 10:53:28 +02:00
|
|
|
# kuva(leitud)
|
|
|
|
|
# kuva(ruum)
|
|
|
|
|
|
|
|
|
|
leitudS = False
|
2023-12-11 19:05:07 +02:00
|
|
|
for x, rida in enumerate(ruum):
|
2023-12-27 10:53:28 +02:00
|
|
|
print(list(enumerate(rida)))
|
|
|
|
|
for y, asukoht in enumerate(rida):
|
|
|
|
|
print(f"x={x}, y={y}, koht={asukoht}")
|
|
|
|
|
if asukoht == "S":
|
|
|
|
|
otsing(x, y)
|
|
|
|
|
leitudS = True
|
|
|
|
|
break
|
|
|
|
|
if leitudS:
|
2023-12-11 19:05:07 +02:00
|
|
|
break
|
2023-12-27 10:53:28 +02:00
|
|
|
|