This commit is contained in:
the 2020-12-21 13:51:56 +00:00
parent 10da3de084
commit 01782c5bfb
1 changed files with 79 additions and 0 deletions

79
day18.py Normal file
View File

@ -0,0 +1,79 @@
from functools import reduce
formulas = []
with open('day18/input') as reader:
formulas.extend(reader.read().splitlines())
def calculate_part1(cur_formula):
res = None
op = None
while cur_formula:
v = None
c = cur_formula.pop(0)
if c == '(':
v = calculate_part1(cur_formula)
elif c == ')':
return res
elif c == '*' or c == '+':
op = c
continue
else:
v = int(c)
if res is None:
res = v
else:
if op == '*':
res *= v
elif op == '+':
res += v
else:
raise ArithmeticError
return res
def calculate_part2(cur_formula):
res = None
op = None
mul_stack = []
while cur_formula:
v = None
c = cur_formula.pop(0)
if c == '(':
v = calculate_part2(cur_formula)
elif c == ')':
mul_stack.append(res)
res = reduce((lambda x, y: x * y), mul_stack)
return res
elif c == '+':
op = c
continue
elif c == '*':
op = c
mul_stack.append(res)
res = None
continue
else:
v = int(c)
if res is None:
res = v
else:
if op == '*':
raise ArithmeticError
elif op == '+':
res += v
else:
raise ArithmeticError
mul_stack.append(res)
res = reduce((lambda x, y: x * y), mul_stack)
return res
total_sum_part1 = sum(map(calculate_part1, map(lambda f: [c for c in f if c != ' '], formulas)))
print(total_sum_part1)
total_sum_part2 = sum(map(calculate_part2, map(lambda f: [c for c in f if c != ' '], formulas)))
print(total_sum_part2)