Skip to content

Commit 1f0581a

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

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

2025/day10/solutions.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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 = [x == "#" for x in toggles[1:-1]]
13+
moves = [set(map(int, b[1:-1].split(","))) for b in buttons]
14+
counters = list(map(int, counters[1:-1].split(",")))
15+
tasks.append((toggles, moves, counters))
16+
17+
18+
def solve(goal, moves, part1):
19+
n, m = len(moves), len(goal)
20+
c = [1] * n
21+
A_eq = [[i in move for move in moves] for i in range(m)]
22+
bounds = [(0, None)] * n
23+
if part1:
24+
c += [0] * m
25+
A_eq = np.hstack([A_eq, -2 * np.eye(m)])
26+
bounds += [(None, None)] * m
27+
return linprog(c, A_eq=A_eq, b_eq=goal, bounds=bounds, integrality=True).fun
28+
29+
30+
# Part 1
31+
print(sum(solve(goal, moves, True) for goal, moves, _ in tasks))
32+
33+
# Part 2
34+
print(sum(solve(goal, moves, False) for _, moves, goal in tasks))

0 commit comments

Comments
 (0)