day 12 p1
This commit is contained in:
64
12/l.py
Normal file
64
12/l.py
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import os
|
||||||
|
import numpy
|
||||||
|
from collections import deque
|
||||||
|
|
||||||
|
input = open(os.path.dirname(__file__) +
|
||||||
|
"/input.txt", "r").readlines()
|
||||||
|
|
||||||
|
start = ()
|
||||||
|
end = ()
|
||||||
|
|
||||||
|
terrain = []
|
||||||
|
for Y, y in enumerate(input):
|
||||||
|
y = y.strip()
|
||||||
|
cur = []
|
||||||
|
for X, x in enumerate(y):
|
||||||
|
h = ord(x)-ord('a')+1
|
||||||
|
if (x == 'S'):
|
||||||
|
h = 1
|
||||||
|
start = (Y, X)
|
||||||
|
if (x == 'E'):
|
||||||
|
h = 26
|
||||||
|
end = (Y, X)
|
||||||
|
cur.append(h)
|
||||||
|
terrain.append(cur)
|
||||||
|
|
||||||
|
print("start:", start, "end:", end)
|
||||||
|
|
||||||
|
H = len(terrain)
|
||||||
|
W = len(terrain[0])
|
||||||
|
|
||||||
|
neighbours = [(-1, 0), (0, 1), (1, 0), (0, -1)]
|
||||||
|
|
||||||
|
|
||||||
|
def find_path(coords):
|
||||||
|
paths = []
|
||||||
|
for n in neighbours:
|
||||||
|
check = tuple(numpy.add(coords, n))
|
||||||
|
if 0 <= check[0] < H and 0 <= check[1] < W and coords != check:
|
||||||
|
if terrain[check[0]][check[1]] <= terrain[coords[0]][coords[1]]+1:
|
||||||
|
paths.append(check)
|
||||||
|
return paths
|
||||||
|
|
||||||
|
|
||||||
|
def solve():
|
||||||
|
Q = deque()
|
||||||
|
Q.append((start, 0))
|
||||||
|
V = set()
|
||||||
|
while Q:
|
||||||
|
cur_pos, d = Q.popleft()
|
||||||
|
print(cur_pos, d)
|
||||||
|
if cur_pos in V:
|
||||||
|
continue
|
||||||
|
V.add(cur_pos)
|
||||||
|
if cur_pos == end:
|
||||||
|
return d
|
||||||
|
|
||||||
|
tocheck = find_path(cur_pos)
|
||||||
|
|
||||||
|
for node in tocheck:
|
||||||
|
Q.append((node, d+1))
|
||||||
|
|
||||||
|
|
||||||
|
print(solve())
|
||||||
|
# print(terrain)
|
||||||
Reference in New Issue
Block a user