diff options
author | dzwdz | 2022-12-11 14:16:39 +0100 |
---|---|---|
committer | dzwdz | 2022-12-11 14:16:39 +0100 |
commit | 2571a014cac9c33aa10145c4019f40278a72659f (patch) | |
tree | 971fa8b3dabd9fb8e18d8142fc7573aece7a812d /22.11/part2.py | |
parent | 8dcd40b1b2f349d2f22a18c4f25b9975bf976f88 (diff) |
day 11 part 2
Diffstat (limited to '22.11/part2.py')
-rw-r--r-- | 22.11/part2.py | 58 |
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) |