advent24-llm / day18 /solution_gpt-4o.py
jerpint's picture
Add solution files
a4da721
from collections import deque
file = "input.txt"
def parse_input(file):
with open(file, 'r') as f:
lines = f.readlines()
return [tuple(map(int, line.strip().split(','))) for line in lines]
def is_within_bounds(x, y, size):
return 0 <= x < size and 0 <= y < size
def bfs(grid, start, end, size):
queue = deque([start])
visited = set([start])
steps = 0
while queue:
for _ in range(len(queue)):
x, y = queue.popleft()
if (x, y) == end:
return steps
for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
nx, ny = x + dx, y + dy
if is_within_bounds(nx, ny, size) and (nx, ny) not in visited and grid[ny][nx] == '.':
visited.add((nx, ny))
queue.append((nx, ny))
steps += 1
return float('inf') # If no path is found
def simulate_falling_bytes(byte_positions, size, max_bytes):
grid = [['.' for _ in range(size)] for _ in range(size)]
start = (0, 0)
end = (size - 1, size - 1)
# Part 1: Find the minimum steps after 1024 bytes
for i, (x, y) in enumerate(byte_positions[:max_bytes]):
grid[y][x] = '#'
min_steps = bfs(grid, start, end, size)
# Part 2: Find the first byte that blocks the path
for i, (x, y) in enumerate(byte_positions):
grid[y][x] = '#'
if bfs(grid, start, end, size) == float('inf'):
return min_steps, f"{x},{y}"
return min_steps, None
def main():
byte_positions = parse_input(file)
size = 71 # The grid size is 71x71
max_bytes = 1024
min_steps, blocking_byte = simulate_falling_bytes(byte_positions, size, max_bytes)
print(min_steps)
print(blocking_byte)
main()