Upd Day05 & Day06
This commit is contained in:
56
2024/day06a.py
Normal file
56
2024/day06a.py
Normal file
@@ -0,0 +1,56 @@
|
||||
with open('/home/bandeira/git.bandeira/aoc/2024/day06/sample.day06', 'r') as f:
|
||||
input_grid = f.read().split('\n')
|
||||
|
||||
UP, LEFT, DOWN, RIGHT = 1, 2, 3, 4
|
||||
rows = len(input_grid)
|
||||
cols = len(input_grid[0])
|
||||
obstacles = set()
|
||||
for i, r in enumerate(input_grid):
|
||||
for j, c in enumerate(r):
|
||||
if c == '#':
|
||||
obstacles.add((i,j))
|
||||
elif c == '^':
|
||||
guard_start = (i, j, UP)
|
||||
|
||||
total = 0
|
||||
for r in range(rows):
|
||||
for c in range(cols):
|
||||
if (r,c) in obstacles:
|
||||
continue
|
||||
|
||||
obstacles.add((r,c))
|
||||
visited_states = {guard_start}
|
||||
guard = guard_start
|
||||
while True:
|
||||
if guard[2] == UP:
|
||||
if (guard[0] - 1, guard[1]) in obstacles:
|
||||
guard = (guard[0], guard[1], RIGHT)
|
||||
else:
|
||||
guard = (guard[0] - 1, guard[1], guard[2])
|
||||
elif guard[2] == RIGHT:
|
||||
if (guard[0], guard[1] + 1) in obstacles:
|
||||
guard = (guard[0], guard[1], DOWN)
|
||||
else:
|
||||
guard = (guard[0], guard[1] + 1, guard[2])
|
||||
elif guard[2] == DOWN:
|
||||
if (guard[0] + 1, guard[1]) in obstacles:
|
||||
guard = (guard[0], guard[1], LEFT)
|
||||
else:
|
||||
guard = (guard[0] + 1, guard[1], guard[2])
|
||||
else:
|
||||
if (guard[0], guard[1] - 1) in obstacles:
|
||||
guard = (guard[0], guard[1], UP)
|
||||
else:
|
||||
guard = (guard[0], guard[1] - 1, guard[2])
|
||||
|
||||
if guard[0] < 0 or guard[0] >= rows or guard[1] < 0 \
|
||||
or guard[1] >= cols:
|
||||
obstacles.remove((r,c))
|
||||
break
|
||||
elif guard in visited_states:
|
||||
total += 1
|
||||
obstacles.remove((r,c))
|
||||
break
|
||||
else:
|
||||
visited_states.add(guard)
|
||||
print(total)
|
||||
Reference in New Issue
Block a user