diff --git a/python/day18.py b/python/day18.py new file mode 100644 index 0000000..f73418a --- /dev/null +++ b/python/day18.py @@ -0,0 +1,52 @@ +import fileinput + + +def solve(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:]) + else: + v = solve(line[:3]) + return solve([str(v)] + line[3:]) + if line[1] == '*': + return solve(line[:1]) * solve(line[2:]) + raise BaseException(f"HELP {repr(line)}") + + + 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(): + line = line.replace(" ", "").strip() + v = solve(list(line)) + print(line, v) + summ += v +print(summ)