slow but functional part 2 day 7

This commit is contained in:
shockrah 2024-12-09 13:16:37 -08:00
parent e0b97af8df
commit 50b13d3b61
2 changed files with 42 additions and 2 deletions

3
7/1.py
View File

@ -1,5 +1,4 @@
from itertools import product from itertools import product
import random
def test(expression: list[str|int]) -> int: def test(expression: list[str|int]) -> int:
while len(expression) >= 3: while len(expression) >= 3:
@ -22,7 +21,7 @@ def genrate_expression(vals: list[int], ops: list[str]) -> list[str|int]:
return expr return expr
with open('input.data') as file: with open('sample.data') as file:
inputs = [] inputs = []
for line in file: for line in file:
vals = [int(val) for val in line.replace(':', '').split()] vals = [int(val) for val in line.replace(':', '').split()]

41
7/2.py Normal file
View File

@ -0,0 +1,41 @@
from itertools import product
def tokenize(vals: list[int], ops: list[str]) -> list[str|int]:
tok = []
for item in zip(vals, ops):
tok.extend(item)
tok.append(vals[-1])
return tok
def compute(tokens: list[str|int]) -> int:
# Case where we have 1 || 2 ==> 12
while len(tokens) >= 3:
# Pop off the first 3 items
left, op, right = tokens[:3]
tokens = tokens[3:] if len(tokens) > 3 else []
# Now we do some computation and prepend the list with that result
if op == '*':
tokens.insert(0, left * right)
elif op == '+':
tokens.insert(0, left + right)
# the coalesce case
else:
tokens.insert(0, int(f'{left}{right}'))
return tokens[0]
with open('input.data') as file:
cases = []
for line in file:
line = line.replace(':', '').split()
cases.append([int(val) for val in line])
s = 0
for case in cases:
answer, vals = case[0], case[1:]
results = set()
for ops in list(product(['*', '+', '||'], repeat=len(vals)-1)):
tokens = tokenize(vals, ops)
results.add(compute(tokens))
if answer in results:
s += answer
print(s)