advent24-llm / day18 /solution_claude-3-5-sonnet-20241022.py
jerpint's picture
Add solution files
a4da721
from collections import deque
import copy
def read_input(file_path):
coordinates = []
with open(file_path, 'r') as f:
for line in f:
x, y = map(int, line.strip().split(','))
coordinates.append((x, y))
return coordinates
def create_grid(size):
return [[False for _ in range(size)] for _ in range(size)]
def is_valid(x, y, size):
return 0 <= x < size and 0 <= y < size
def get_neighbors(x, y, grid):
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
size = len(grid)
neighbors = []
for dx, dy in directions:
new_x, new_y = x + dx, y + dy
if is_valid(new_x, new_y, size) and not grid[new_y][new_x]:
neighbors.append((new_x, new_y))
return neighbors
def shortest_path(grid, start, end):
if grid[start[1]][start[0]] or grid[end[1]][end[0]]:
return float('inf')
queue = deque([(start[0], start[1], 0)])
visited = {start}
while queue:
x, y, dist = queue.popleft()
if (x, y) == end:
return dist
for next_x, next_y in get_neighbors(x, y, grid):
if (next_x, next_y) not in visited:
visited.add((next_x, next_y))
queue.append((next_x, next_y, dist + 1))
return float('inf')
def path_exists(grid, start, end):
if grid[start[1]][start[0]] or grid[end[1]][end[0]]:
return False
queue = deque([start])
visited = {start}
while queue:
x, y = queue.popleft()
if (x, y) == end:
return True
for next_x, next_y in get_neighbors(x, y, grid):
if (next_x, next_y) not in visited:
visited.add((next_x, next_y))
queue.append((next_x, next_y))
return False
def solve_part1(coordinates, size=71):
grid = create_grid(size)
for i in range(1024):
if i >= len(coordinates):
break
x, y = coordinates[i]
grid[y][x] = True
result = shortest_path(grid, (0, 0), (size-1, size-1))
return str(result)
def solve_part2(coordinates, size=71):
grid = create_grid(size)
for i, (x, y) in enumerate(coordinates):
grid[y][x] = True
if not path_exists(grid, (0, 0), (size-1, size-1)):
return f"{x},{y}"
return "No solution found"
coordinates = read_input("./input.txt")
print(solve_part1(coordinates))
print(solve_part2(coordinates))