day18
This commit is contained in:
parent
10da3de084
commit
01782c5bfb
|
|
@ -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)
|
||||
Loading…
Reference in New Issue