mirror of
https://github.com/peter-tanner/advent-of-code-2020.git
synced 2024-11-30 10:50:17 +08:00
48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
|
|
import ast
|
|
import math
|
|
|
|
exprs = open('input').read().splitlines()
|
|
|
|
def specialeval(expr):
|
|
expr_arr = ('+ '+expr).replace('(', '( + ').replace(')', ' ) ').split(' ')
|
|
stack = [0]
|
|
opstack = []
|
|
level = 0
|
|
# print(expr_arr)
|
|
for i in range(0,len(expr_arr)-1,2):
|
|
# print(stack)
|
|
# print([expr_arr[i], expr_arr[i+1]])
|
|
op = expr_arr[i]
|
|
if expr_arr[i+1] == '(':
|
|
level += 1
|
|
stack.append(0)
|
|
opstack.append(expr_arr[i])
|
|
else:
|
|
# print(expr_arr[i+1])
|
|
if op == '+':
|
|
stack[level] += int(expr_arr[i+1])
|
|
elif op == '*':
|
|
stack[level] *= int(expr_arr[i+1])
|
|
else: # )
|
|
op = opstack[level-1]
|
|
if op == '+':
|
|
stack[level-1] += int(stack[level])
|
|
elif op == '*':
|
|
stack[level-1] *= int(stack[level])
|
|
level -= 1
|
|
stack.pop()
|
|
opstack.pop()
|
|
return stack[0]
|
|
|
|
def a(exprs):
|
|
return sum([specialeval(expr) for expr in exprs])
|
|
|
|
def b(exprs):
|
|
return sum([
|
|
specialeval('('+(expr+' * 1').replace('(','((').replace(')','))').replace(' * ', ') * (')+')')
|
|
for expr in exprs
|
|
])
|
|
|
|
print(a(exprs))
|
|
print(b(exprs)) |