Day 18 p1
[advent-of-code-2020.git] / day18 / badmath.py
diff --git a/day18/badmath.py b/day18/badmath.py
new file mode 100755 (executable)
index 0000000..b7e6dda
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/python3
+
+import sys
+
+filename="p1_71.txt"
+if len(sys.argv) > 1:
+    filename=sys.argv[1]
+
+def parse_sum(oursum):
+    parts = oursum.split()
+    new_parts=[]
+    for part in parts:
+        if part[0]=="(":
+            for index,c in enumerate(part):
+                if c=="(":
+                    new_parts.append("(")
+                else:
+                    new_parts.append(part[index:])
+                    break
+        elif part[-1]==")":
+            got_number=False
+            for index,c in enumerate(part):
+                if c==")":
+                    if not got_number:
+                        new_parts.append(part[0:index])
+                        got_number=True
+                    new_parts.append(c)
+        else:
+            new_parts.append(part)
+    return new_parts
+
+def do_sum(parts):
+    cur_total=0
+    next_oper="+"
+    bracketed=[]
+    in_brackets=0
+    for part in parts:
+        if in_brackets > 0 and part != ")" and part != "(":
+            bracketed.append(part)
+            continue
+        if in_brackets > 0 and part == ")":
+            in_brackets-=1
+            bracketed.append(part)
+            if in_brackets == 0:
+                part=do_sum(bracketed[1:-1])
+                bracketed.clear()
+            else:
+                continue
+        if part == "+":
+            next_oper="+"
+        elif part == "*":
+            next_oper="*"
+        elif part == "(":
+            in_brackets+=1
+            bracketed.append(part)
+        else:
+            part=int(part)
+            if next_oper == "+":
+                cur_total+=part
+            else:
+                cur_total*=part
+    return cur_total
+
+total=0
+total2=0
+for line in [line.rstrip() for line in open(filename, "r")]:
+    answer=do_sum(parse_sum(line))
+    total+=answer
+
+print("Part 1 Total:", total)
+
+