diff --git a/day18/part1.py b/day18/part1.py index 496a8f8..5be55db 100644 --- a/day18/part1.py +++ b/day18/part1.py @@ -1,11 +1,6 @@ #!/usr/bin/env python3 -import re lines = (x.strip().replace(" ", "") for x in open("input.txt")) -RE_PLUS = re.compile(r"\+") -RE_MUL = re.compile(r"\*") -RE_NUM = re.compile(r"^\d") -RE_PAR = re.compile(r"^\((.*?)\)$") def evaluate(line): stack = [0] @@ -28,4 +23,5 @@ def evaluate(line): stack[-1] = stack[-1]*num if op[-1] == '*' else stack[-1]+num return stack[0] + print(sum(evaluate(line) for line in lines)) diff --git a/day18/part2.py b/day18/part2.py index 324c4c0..c569dd5 100644 --- a/day18/part2.py +++ b/day18/part2.py @@ -11,7 +11,7 @@ def calc(a, b, pop): return operators[pop][1](a, b) -def pres(pop): +def prec(pop): return operators.get(pop, [0])[0] @@ -24,11 +24,11 @@ def evaluate(line): elif char == '(': stack.append(char) elif char == ')': - while pres(stack[-1]) > 0: + while prec(stack[-1]) > 0: postfix.append(calc(postfix.pop(), postfix.pop(), stack.pop())) - stack.pop() # remove ( - elif char in "*+": - while pres(stack[-1]) > pres(char): + stack.pop() + elif char in operators: + while prec(stack[-1]) > prec(char): postfix.append(calc(postfix.pop(), postfix.pop(), stack.pop())) stack.append(char) postfix.append(0)