1414from collections import deque
1515import math
1616import re
17- from typing import ClassVar
17+ from typing import ClassVar , cast
1818
19- from numpy import transpose
19+ import numpy as np
20+ import numpy .typing as npt
2021from scipy .optimize import linprog
2122
2223from aoc .models .base import SolutionBase
@@ -193,16 +194,17 @@ def min_presses_for_machine(
193194 if any (t != 0 for t in target ):
194195 err_msg = f"Unreachable target { target } with given buttons"
195196 raise ValueError (err_msg )
197+
196198 return 0
197199
198200 # Objective: minimize total button presses
199201 c = [1 ] * N
200202
201203 # Build equality constraints: sum(button_vectors * presses) = target
202- A_eq = [self .button_to_vector (btn , num_jolt ) for btn in buttons ] # noqa: N806
203- A_eq = transpose (A_eq ) # noqa: N806
204- b_eq = target
205- integrality = [ 1 ] * N
204+ A_eq_list = [self .button_to_vector (btn , num_jolt ) for btn in buttons ] # noqa: N806
205+ A_eq : npt . NDArray [ np . int_ ] = np . transpose (A_eq_list ) # noqa: N806
206+ b_eq = np . array ( target , dtype = int )
207+ integrality = np . ones ( N , dtype = int )
206208
207209 res = linprog (
208210 c ,
@@ -215,7 +217,9 @@ def min_presses_for_machine(
215217 err_msg = f"Unreachable target { target } with given buttons"
216218 raise ValueError (err_msg )
217219
218- return int (math .ceil (sum (res .x )))
220+ x = cast (npt .NDArray [np .float64 ], res .x )
221+ total_presses = float (x .sum ())
222+ return int (math .ceil (total_presses ))
219223
220224 def part1 (self , data : list [str ]) -> int :
221225 """Sum minimum button presses to match indicator lights for all machines.
0 commit comments