aoc2020/18/2.py

35 lines
875 B
Python

with open("input") as f:
content = [x.strip().replace(")", " )").replace("(", "( ").split(" ") for x in f]
def evaluate(expression, startpos):
result = 0
number = 0
i = startpos
expression2 = []
endpos = startpos
while i < len(expression):
number = None
if expression[i] == "(":
number, i = evaluate(expression, i + 1)
elif expression[i] == ")":
endpos = i
break
elif expression[i] == "*":
expression2.append(result)
result = 0
elif expression[i] != "+":
number = int(expression[i])
if number is not None:
result += number
i += 1
expression2.append(result)
result = 1
for e in expression2:
result *= e
return result, endpos
print(sum(map(lambda x: evaluate(x, 0)[0], content)))