48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
|
import random
|
||
|
|
||
|
def test(expression: list[str|int]) -> int:
|
||
|
while len(expression) >= 3:
|
||
|
left, op, right = expression[0], expression[1], expression[2]
|
||
|
if len(expression) > 3:
|
||
|
expression = expression[3:]
|
||
|
else:
|
||
|
expression = []
|
||
|
if op == '*':
|
||
|
expression.insert(0, left * right)
|
||
|
else:
|
||
|
expression.insert(0, left + right)
|
||
|
return expression[0]
|
||
|
|
||
|
def genrate_expression(vals: list[int]) -> list[str|int]:
|
||
|
ops = [random.choice('*+') for _ in range(len(vals) - 1)]
|
||
|
expr = []
|
||
|
for item in zip(vals, ops):
|
||
|
expr.extend(item)
|
||
|
expr.append(vals[-1])
|
||
|
return expr
|
||
|
|
||
|
|
||
|
with open('input.data') as file:
|
||
|
inputs = []
|
||
|
for line in file:
|
||
|
vals = [int(val) for val in line.replace(':', '').split()]
|
||
|
inputs.append([vals[0], vals[1:]])
|
||
|
s = 0
|
||
|
for case in inputs:
|
||
|
answer, vals = case[0], case[1]
|
||
|
expr = genrate_expression(vals)
|
||
|
for i in range(20000):
|
||
|
expr = genrate_expression(vals)
|
||
|
result = test(expr)
|
||
|
if result == answer:
|
||
|
#print(expr)
|
||
|
s += answer
|
||
|
break
|
||
|
print(s)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|