def parse_input(file): robots = [] with open(file, 'r') as f: for line in f: parts = line.strip().split() p_str = parts[0][2:-1].split(',') v_str = parts[1][2:-1].split(',') robots.append( ((int(p_str[0]), int(p_str[1])), (int(v_str[0]), int(v_str[1]))) ) return robots def simulate(robots, seconds, width, height): positions = [] for (px, py), (vx, vy) in robots: new_x = (px + vx * seconds) % width new_y = (py + vy * seconds) % height positions.append((new_x, new_y)) return positions def calculate_safety_factor(positions, width, height): quadrants = [0] * 4 for x, y in positions: if x < width // 2 and y < height // 2: quadrants[0] += 1 elif x > width // 2 and y < height // 2: quadrants[1] += 1 elif x < width // 2 and y > height // 2: quadrants[2] += 1 elif x > width // 2 and y > height // 2: quadrants[3] += 1 return quadrants[0] * quadrants[1] * quadrants[2] * quadrants[3] def find_easter_egg(robots, width, height): seconds = 0 while True: positions = simulate(robots, seconds, width, height) min_x = min(p[0] for p in positions) max_x = max(p[0] for p in positions) min_y = min(p[1] for p in positions) max_y = max(p[1] for p in positions) if (max_x - min_x) * (max_y - min_y) < 1000: # Adjust threshold as needed return seconds seconds += 1 file = "./input.txt" robots = parse_input(file) width = 101 height = 103 positions_after_100 = simulate(robots, 100, width, height) safety_factor = calculate_safety_factor(positions_after_100, width, height) print(safety_factor) easter_egg_time = find_easter_egg(robots, width, height) print(easter_egg_time)