import math class Monkey: def __init__(self, items, inspect, divider, _true, _false): self.inspected = 0 self.items = [] for x in items: self.items.append(int(x)) self.divider = int(divider) self._true = int(_true) self._false = int(_false) if '+' in inspect: self.inspect_kind = 1 tempa, tempb = inspect.split('+ ') self.inspect_amount = int(tempb) elif inspect.endswith('old'): self.inspect_kind = 3 else: self.inspect_kind = 2 tempa, tempb = inspect.split('* ') self.inspect_amount = int(tempb) def inspect(self): if self.items == []: return for x in range(len(self.items)): self.inspected += 1 if self.inspect_kind == 1: self.items[x] += self.inspect_amount if self.inspect_kind == 2: self.items[x] = self.items[x] * self.inspect_amount if self.inspect_kind == 3: self.items[x] = self.items[x] * self.items[x] self.items[x] %= modulo if self.items[x] % self.divider == 0: monkeys[self._true].addItem(self.items[x]) else: monkeys[self._false].addItem(self.items[x]) self.items = [] def addItem(self, item): self.items.append(item) def retInspect(self): return self.inspected with open('input11.txt','r') as f: inp = f.read().splitlines(keepends=False) monkeys = [] tempMain = [] monkeyBuisness = [] dividers = [] modulo = 1 for i in range(len(inp)): tempMain.append(inp[i]) if inp[i] == '' or i == (len(inp) - 1): tempa, tempb = tempMain[1].split(': ') items = tempb.split(', ') tempa, divider = tempMain[3].split('by ') dividers.append(int(divider)) tempa, inspect = tempMain[2].split('= ') tempa, _true = tempMain[4].split('monkey ') tempa, _false = tempMain[5].split('monkey ') newMonkey = Monkey(items, inspect, divider, _true, _false) monkeys.append(newMonkey) tempMain = [] for i in dividers: modulo = modulo * i for _ in range(10000): for i in monkeys: i.inspect() for i in monkeys: monkeyBuisness.append(i.retInspect()) monkeyBuisness.sort() print(monkeyBuisness[-1]*monkeyBuisness[-2])