summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordzwdz2022-12-11 14:16:39 +0100
committerdzwdz2022-12-11 14:16:39 +0100
commit2571a014cac9c33aa10145c4019f40278a72659f (patch)
tree971fa8b3dabd9fb8e18d8142fc7573aece7a812d
parent8dcd40b1b2f349d2f22a18c4f25b9975bf976f88 (diff)
day 11 part 2
-rw-r--r--22.11/part2.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/22.11/part2.py b/22.11/part2.py
new file mode 100644
index 0000000..08821fd
--- /dev/null
+++ b/22.11/part2.py
@@ -0,0 +1,58 @@
+from functools import reduce
+
+items = []
+ops = []
+decide = []
+points = []
+tests = []
+
+# garbage parser because i fucking hate this day already
+def readMonke():
+ input()
+ items.append([int(s) for s in input()[18:].split(', ')])
+
+ op_l = input()[23:]
+ op = op_l[0]
+ arg = None
+ self = op_l[2:] == "old"
+ if not self:
+ arg = int(op_l[2:])
+
+ if self and op == "*":
+ ops.append(lambda x: x * x)
+ elif not self and op == "*":
+ ops.append(lambda x: x * arg)
+ elif not self and op == "+":
+ ops.append(lambda x: x + arg)
+ else:
+ raise "fuck shit piss"
+
+ test = int(input()[21:])
+ tests.append(test)
+
+ onTrue = int(input()[29:])
+ onFalse = int(input()[30:])
+ decide.append(lambda x: onTrue if x % test == 0 else onFalse)
+ points.append(0)
+
+while True:
+ readMonke()
+ try: input()
+ except EOFError: break
+
+lcm = reduce(lambda a,b:a*b, tests) # all prime numbers, no lcm on town
+
+def doRound():
+ for monkey in range(len(items)):
+ points[monkey] += len(items[monkey])
+ for item in items[monkey]:
+ item = ops[monkey](item) % lcm
+ items[decide[monkey](item)].append(item)
+ items[monkey] = []
+
+
+for _ in range(10000):
+ doRound()
+
+a, b = sorted(points)[-2:]
+print(a * b)