summaryrefslogtreecommitdiff
path: root/2022/day13.py
diff options
context:
space:
mode:
Diffstat (limited to '2022/day13.py')
-rwxr-xr-x2022/day13.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/2022/day13.py b/2022/day13.py
new file mode 100755
index 0000000..cf65dfb
--- /dev/null
+++ b/2022/day13.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+
+# import numpy as np
+from functools import reduce
+from re import findall
+from copy import deepcopy
+import sys
+
+# filename = "in/day13.ref"
+filename = "in/day13.pzl"
+data = open(filename).read()
+lines = [line for line in data.rstrip('\n').split('\n')]
+
+pairs = list()
+for pair in data.strip().split('\n\n'):
+ p = list()
+ for l in pair.split('\n'):
+ p.append(eval(l.strip()))
+ pairs.append(p)
+
+res1 = 0
+res2 = 0
+
+def check_pair(l,r):
+ if type(l) == int and type(r) == int:
+ if l > r:
+ return 0
+ elif l < r:
+ return 1
+ else:
+ return 2
+ elif type(l) == list and type(r) == list:
+ ret = 2
+ for ll,rr in zip(l,r):
+ ret = check_pair(ll,rr)
+ if ret == 0:
+ return 0
+ elif ret == 1:
+ return 1
+ if ret == 2:
+ if len(l) > len(r):
+ return 0
+ if len(l) == len(r):
+ return 2
+ elif type(l) == list and type(r) == int:
+ return check_pair(l, [r])
+ elif type(l) == int and type(r) == list:
+ return check_pair([l], r)
+ return 1
+
+## part 1 ##
+for i,(l,r) in enumerate(pairs):
+ ret = check_pair(l,r)
+ # print(i+1, ret, l,r)
+ if ret != 0:
+ res1 += i+1
+
+## part 2 ##
+ordered = list()
+divs = [ [[2]], [[6]] ]
+for div in divs:
+ ordered.append(div)
+for l,r in pairs:
+ ordered.append(l)
+ ordered.append(r)
+
+for i in range(len(ordered)):
+ for j in range(1,len(ordered)):
+ if check_pair(ordered[j-1], ordered[j]) == 0:
+ ordered[j-1], ordered[j] = ordered[j], ordered[j-1]
+# for line in ordered:
+# print(line)
+
+res2 = 1
+for i,ele in enumerate(ordered):
+ if ele in divs:
+ res2 *= i+1
+
+print('res1:', res1)
+print('res2:', res2)
+