Skip to content

Commit 2d25593

Browse files
committed
Add solution to 2025-12-10
1 parent c7cb303 commit 2d25593

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

2025/day10/solutions.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import numpy as np
2+
from scipy.optimize import linprog
3+
from collections import deque
4+
5+
6+
with open("input") as f:
7+
ls = f.read().strip().split("\n")
8+
9+
tasks = []
10+
for l in ls:
11+
toggles, *buttons, counters = l.split()
12+
toggles = set(i for i, x in enumerate(toggles[1:-1]) if x == "#")
13+
moves = [set(map(int, b[1:-1].split(","))) for b in buttons]
14+
counters = tuple(map(int, counters[1:-1].split(",")))
15+
tasks.append((toggles, moves, counters))
16+
17+
18+
def solve1(goal, moves):
19+
q = deque()
20+
q.append((set(), 0))
21+
seen = set()
22+
while q:
23+
curr, steps = q.popleft()
24+
if curr == goal:
25+
return steps
26+
for m in moves:
27+
newset = curr ^ m
28+
if newset in seen:
29+
continue
30+
seen.add(frozenset(newset))
31+
q.append((newset, steps + 1))
32+
33+
34+
print(sum(solve1(goal, moves) for goal, moves, _ in tasks))
35+
36+
37+
# Part 2
38+
def solve2(goal, moves):
39+
c = [1] * len(moves)
40+
A_eq = [[i in m for m in moves] for i in range(len(goal))]
41+
return linprog(c, A_eq=A_eq, b_eq=goal, integrality=True).fun
42+
43+
44+
print(sum(solve2(counters, moves) for _, moves, counters in tasks))

0 commit comments

Comments
 (0)