|
|
@@ -16,13 +16,13 @@ def bfs(grid):
|
|
|
if grid[ny][nx] != '#' and nb not in visited:
|
|
|
visited[nb] = steps + 1
|
|
|
work.append((nb, steps + 1))
|
|
|
- return visited
|
|
|
+ return list(visited.values())
|
|
|
|
|
|
def reachable_in_26501365_steps(min_dists):
|
|
|
# https://github.com/villuna/aoc23/wiki/A-Geometric-solution-to-advent-of-code-2023,-day-21
|
|
|
n = (26501365 - 131 // 2) // 131 # w = h = 131
|
|
|
even = odd = even_corners = odd_corners = 0
|
|
|
- for dist in min_dists.values():
|
|
|
+ for dist in min_dists:
|
|
|
is_odd = dist % 2
|
|
|
even += 1 - is_odd
|
|
|
odd += is_odd
|
|
|
@@ -33,6 +33,6 @@ def reachable_in_26501365_steps(min_dists):
|
|
|
corners = (n + 1) * odd_corners + n * even_corners
|
|
|
return whole_squares - corners
|
|
|
|
|
|
-min_dists = bfs(sys.stdin.read().split())
|
|
|
-print(sum(dist % 2 == 0 and dist <= 64 for xy, dist in min_dists.items()))
|
|
|
+min_dists = bfs([line.rstrip() for line in sys.stdin])
|
|
|
+print(sum(dist <= 64 and dist % 2 == 0 for dist in min_dists))
|
|
|
print(reachable_in_26501365_steps(min_dists))
|