adventofcode2020/18/18-2.py
2020-12-22 20:01:31 +00:00

62 lines
No EOL
1.3 KiB
Python

#!/usr/bin/python3
import sys, re
def find_paren(items):
if ')' not in items:
return None
close = items.index(')')
for x in range(close, -1, -1):
#print (x,items[x])
if items[x] == '(':
return(x, close)
def do(op, a, b):
if op == '+':
return a+b
elif op == '-':
return a-b
elif op == '*':
return a*b
elif op == '/':
return a/b
def solve(nums):
items = nums.split(' ')
total = None
op = ''
for n in items:
if n == '*' or n == '+' or n == '-' or n == '/':
op = n
else:
if total is None:
total = int(n)
else:
total = do(op, total, int(n))
return total
def process(items):
items =re.sub('(\d+ \+ \d+)', '(\\1)', items)
print(items)
p = find_paren(items)
while p is not None:
before = p[0]
after = p[1]
nitems = items[:before] + str(solve(items[before+1:after])) + items[after+1:]
items = nitems
items =re.sub('(\d+ \+ \d+)', '(\\1)', items)
p = find_paren(items)
return(solve(items))
all = []
for line in sys.stdin:
line = line.rstrip()
print(line)
res = process(line)
print(res)
all.append(res)
print(sum(all))