diff --git a/python/day18.py b/python/day18.py index f73418a..6e5aea8 100644 --- a/python/day18.py +++ b/python/day18.py @@ -1,47 +1,48 @@ import fileinput +def find_matching_parenthesis(line): + depth = 1 + for i, c in enumerate(line[1:]): + if c == "(": + depth += 1 + if c == ")": + depth -= 1 + if depth == 0: + break + return i + + def solve(line): + print("".join(line)) if line[0].isdigit(): if len(line) == 1: return int(line[0]) - if len(line) == 3 and line[1] == '+': - return int(line[0]) + int(line[2]) - if len(line) == 3 and line[1] == '*': - return int(line[0]) * int(line[2]) - if line[1] == '+': - if line[2] == '(': - depth = 1 - for i, c in enumerate(line[3:]): - if c == '(': - depth += 1 - if c == ')': - depth -= 1 - if depth == 0: - break - inner = int(line[0]) + solve(line[3:i+3]) - return solve([str(inner)] + line[i+4:]) + if len(line) == 3: + if line[1] == "+": + return int(line[0]) + int(line[2]) + if line[1] == "*": + return int(line[0]) * int(line[2]) + + if line[1] == "+": + if line[2] == "(": + closing = find_matching_parenthesis(line[2:]) + inner = int(line[0]) + solve(line[3 : closing + 4]) + return solve([str(inner)] + line[closing + 5 :]) else: v = solve(line[:3]) return solve([str(v)] + line[3:]) - if line[1] == '*': + + if line[1] == "*": return solve(line[:1]) * solve(line[2:]) raise BaseException(f"HELP {repr(line)}") + if line[0] == "(": + closing = find_matching_parenthesis(line[1:]) + inner = str(solve(line[1 : closing +2])) + return solve([inner] + line[closing +3 :]) - if line[0] == '(': - depth = 1 - for i, c in enumerate(line[1:]): - if c == '(': - depth += 1 - if c == ')': - depth -= 1 - if depth == 0: - break - - inner = str(solve(line[1:i+1])) - return solve([inner] + line[i+2:]) summ = 0 for line in fileinput.input():