adventofcode2024/day16/sol.py

45 lines
1.0 KiB
Python
Raw Permalink Normal View History

2024-12-16 05:31:07 +00:00
import astar
def solve(file):
map = [line.strip() for line in file]
for y in range(len(map)):
for x,c in enumerate(map[y]):
if c == 'S':
start = (x,y,'>')
elif c == 'E':
end = (x,y)
def isgoal(n):
x,y,_ = n
#print("isgoal", n)
return (x,y) == end
def get(x,y):
return map[y][x]
print(map)
print(start, end)
def neighbors(src):
x,y,dir = src
n = []
def push(x,y, newdir):
if 0 <= y < len(map):
if 0 <= x < len(map[y]):
if get(x,y) != '#':
cost = 1 if dir == '.' or newdir == dir else 1001
n.append((cost, (x,y,newdir)))
push(x-1, y, '<')
push(x+1,y, '>')
push(x, y-1, '^')
push(x, y+1, 'v')
return n
cost, _, nodes = astar.search(start, isgoal, neighbors)
print(cost)
print(len(set((x,y) for x,y,_ in nodes)))
solve(open('sample1.in'))
solve(open('input'))