From c305a3bfcaf6027caf286ce0bd611372d118c43b Mon Sep 17 00:00:00 2001 From: Ben Charlton Date: Tue, 22 Dec 2020 20:01:31 +0000 Subject: [PATCH] day 18 --- 18/18-1.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 18/18-2.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 18/18-1.py create mode 100644 18/18-2.py diff --git a/18/18-1.py b/18/18-1.py new file mode 100644 index 0000000..2c4e5e5 --- /dev/null +++ b/18/18-1.py @@ -0,0 +1,57 @@ +#!/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): + + 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 + p = find_paren(items) + return(solve(items)) + +all = [] +for line in sys.stdin: + line = line.rstrip() + print(line) + all.append(process(line)) + +print(sum(all)) \ No newline at end of file diff --git a/18/18-2.py b/18/18-2.py new file mode 100644 index 0000000..df84953 --- /dev/null +++ b/18/18-2.py @@ -0,0 +1,62 @@ +#!/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)) \ No newline at end of file