Fixup day18 and add second part main
authorBrett Parker <iDunno@sommitrealweird.co.uk>
Wed, 15 Dec 2021 00:17:16 +0000 (00:17 +0000)
committerBrett Parker <iDunno@sommitrealweird.co.uk>
Wed, 15 Dec 2021 00:17:16 +0000 (00:17 +0000)
day18/badmath.py
day18/badmath2.py [new file with mode: 0755]
day18/p2_1445.txt [new file with mode: 0644]
day18/p2_23340.txt [new file with mode: 0644]
day18/p2_46.txt [new file with mode: 0644]
day18/p2_51.txt [new symlink]
day18/p2_669060.txt [new file with mode: 0644]

index b7e6ddab1c2c7c7dd2f5d95537ab041a513259ff..9ebf20e1792faf81b27eac4ea42b0c6f5239869f 100755 (executable)
@@ -62,11 +62,8 @@ def do_sum(parts):
     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)
-
-
diff --git a/day18/badmath2.py b/day18/badmath2.py
new file mode 100755 (executable)
index 0000000..4100f45
--- /dev/null
@@ -0,0 +1,87 @@
+#!/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.extend(parse_sum(part[index:]))
+                    break
+        elif part[-1]==")":
+            got_number=False
+            for index,c in enumerate(part):
+                if c==")":
+                    if not got_number:
+                        new_parts.extend(parse_sum(part[0:index]))
+                        got_number=True
+                    new_parts.append(c)
+        elif part in ['+','*']:
+            new_parts.append(part)
+        else:
+            new_parts.append(int(part))
+    return new_parts
+
+def do_sum(parts):
+    cur_total=0
+    next_oper="+"
+    bracketed=[]
+    in_brackets=0
+    new_parts=[]
+
+    # first do all bracketed parts
+    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 == "(":
+            in_brackets+=1
+            bracketed.append(part)
+            continue
+        new_parts.append(part)
+
+    while "+" in new_parts:
+        plus_index = new_parts.index("+")
+        left=new_parts[plus_index-1]
+        right=new_parts[plus_index+1]
+        new_new_parts=new_parts[:plus_index-1]
+        new_new_parts.append(left+right)
+        new_new_parts.extend(new_parts[plus_index+2:])
+        new_parts=new_new_parts
+
+    cur_total=new_parts[0]
+
+    # now we should just be able to go through new_parts left to right
+    for part in new_parts[1:]:
+        if part == '*':
+            continue
+        else:
+            cur_total*=int(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 2 Total:", total)
diff --git a/day18/p2_1445.txt b/day18/p2_1445.txt
new file mode 100644 (file)
index 0000000..48e9a4e
--- /dev/null
@@ -0,0 +1 @@
+5 + (8 * 3 + 9 + 3 * 4 * 3)
diff --git a/day18/p2_23340.txt b/day18/p2_23340.txt
new file mode 100644 (file)
index 0000000..9a421d5
--- /dev/null
@@ -0,0 +1 @@
+((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2
diff --git a/day18/p2_46.txt b/day18/p2_46.txt
new file mode 100644 (file)
index 0000000..ea858ad
--- /dev/null
@@ -0,0 +1 @@
+2 * 3 + (4 * 5)
diff --git a/day18/p2_51.txt b/day18/p2_51.txt
new file mode 120000 (symlink)
index 0000000..c63a6eb
--- /dev/null
@@ -0,0 +1 @@
+p1_51.txt
\ No newline at end of file
diff --git a/day18/p2_669060.txt b/day18/p2_669060.txt
new file mode 100644 (file)
index 0000000..81fdf5d
--- /dev/null
@@ -0,0 +1 @@
+5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))