advent24-llm / day14 /solution_claude-3-5-sonnet-20241022.py
jerpint's picture
Add solution files
a4da721
def parse_input(file_path):
robots = []
with open(file_path, 'r') as f:
for line in f:
p, v = line.strip().split()
px, py = map(int, p[2:].split(','))
vx, vy = map(int, v[2:].split(','))
robots.append((px, py, vx, vy))
return robots
def update_position(x, y, vx, vy, width, height):
x = (x + vx) % width
y = (y + vy) % height
return x, y
def count_robots_in_quadrants(positions, width, height):
mid_x = width // 2
mid_y = height // 2
quadrants = [0] * 4 # TL, TR, BL, BR
for x, y in positions:
if x == mid_x or y == mid_y:
continue
if x < mid_x:
if y < mid_y:
quadrants[0] += 1 # Top-left
else:
quadrants[2] += 1 # Bottom-left
else:
if y < mid_y:
quadrants[1] += 1 # Top-right
else:
quadrants[3] += 1 # Bottom-right
return quadrants
def is_christmas_tree(positions, width, height):
# Create a grid representation
grid = [[0] * width for _ in range(height)]
for x, y in positions:
grid[y][x] += 1
# Check for basic Christmas tree pattern
# This is a simplified check - adjust pattern as needed
tree_pattern = False
center_x = width // 2
# Check for triangular shape with a trunk
tree_points = 0
trunk_points = 0
for y in range(height):
row_count = sum(1 for x in range(width) if grid[y][x] > 0)
if row_count > 0:
if row_count == 1 and grid[y][center_x] > 0:
trunk_points += 1
elif row_count > 1:
tree_points += 1
return tree_points >= 5 and trunk_points >= 2
def solve_part1(robots, width=101, height=103):
positions = set()
for px, py, vx, vy in robots:
x, y = px, py
for _ in range(100):
x, y = update_position(x, y, vx, vy, width, height)
positions.add((x, y))
quadrants = count_robots_in_quadrants(positions, width, height)
return str(quadrants[0] * quadrants[1] * quadrants[2] * quadrants[3])
def solve_part2(robots, width=101, height=103, max_seconds=10000):
for second in range(max_seconds):
positions = set()
for px, py, vx, vy in robots:
x, y = px, py
for _ in range(second):
x, y = update_position(x, y, vx, vy, width, height)
positions.add((x, y))
if is_christmas_tree(positions, width, height):
return str(second)
return "Pattern not found"
# Read and solve
robots = parse_input("./input.txt")
# Part 1
print(solve_part1(robots))
# Part 2
print(solve_part2(robots))