day 10 part 2
This commit is contained in:
parent
6f29e48807
commit
e086476976
2 changed files with 73 additions and 67 deletions
36
day10/2linearopt.py
Normal file
36
day10/2linearopt.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
from typing import final
|
||||
import numpy as np
|
||||
|
||||
from scipy.optimize import LinearConstraint, milp
|
||||
|
||||
with open(r'day10/input.txt', 'r') as input:
|
||||
lines = input.read().split('\n')[:-1]
|
||||
|
||||
joltage = []
|
||||
buttons = []
|
||||
|
||||
for line in lines:
|
||||
split_line = line.split(' ')
|
||||
buttons.append(list(map(lambda x: set(map(int,(x[1:-1]).split(','))),split_line[1:-1])))
|
||||
joltage.append(tuple(map(lambda x:int(x),split_line[-1][1:-1].split(','))))
|
||||
|
||||
finalsum = 0
|
||||
for i,buttonlist in enumerate(buttons):
|
||||
c = np.array([1]*len(buttonlist))
|
||||
A_array = []
|
||||
BL_array = []
|
||||
for j in range(len(joltage[i])):
|
||||
array = []
|
||||
for button in buttonlist:
|
||||
array.append(1 if j in button else 0)
|
||||
A_array.append(array)
|
||||
BL_array.append(joltage[i][j])
|
||||
A = np.array(A_array)
|
||||
b_l = np.array(BL_array)
|
||||
b_u = np.array(BL_array)
|
||||
constraints = LinearConstraint(A,b_l,b_u)
|
||||
integrality = np.ones_like(c)
|
||||
res = milp(c=c, constraints=constraints, integrality=integrality)
|
||||
print(res.x)
|
||||
finalsum += sum(res.x)
|
||||
print(finalsum)
|
||||
Loading…
Add table
Add a link
Reference in a new issue