You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.0 KiB
71 lines
2.0 KiB
lines = open('input.txt', 'r').read().split("\n\n")
|
|
lines = [line.splitlines() for line in lines]
|
|
|
|
class Monkey:
|
|
def __init__(self, index, items, operator, mul, div, true, false):
|
|
self.index = index
|
|
self.items = items
|
|
self.operator = operator
|
|
self.mul = mul
|
|
self.div = div
|
|
self.true = true
|
|
self.false = false
|
|
self.activity = 0
|
|
|
|
def business(self):
|
|
throwing = []
|
|
at = []
|
|
for idx, item in enumerate(self.items):
|
|
worry = self.op(idx)
|
|
worry = worry // 3
|
|
target = self.true if self.test(worry) else self.false
|
|
throwing.append(worry)
|
|
at.append(target)
|
|
self.items = []
|
|
return (throwing, at)
|
|
def op(self, itemindex):
|
|
if self.mul == "old":
|
|
mult = int(self.items[itemindex])
|
|
else:
|
|
mult = int(self.mul)
|
|
if self.operator == "*":
|
|
worry = self.items[itemindex] * mult
|
|
else:
|
|
worry = self.items[itemindex] + mult
|
|
self.activity += 1
|
|
return worry
|
|
def test(self, worrylevel):
|
|
if worrylevel % self.div == 0:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
monkeys = []
|
|
for l in lines:
|
|
index = l[0].split(" ")[1][:-1]
|
|
items = [int(i) for i in l[1].split(":")[1].replace(",","").split(" ")[1:]]
|
|
operation, mul = l[2].split(" ")[-2:]
|
|
divisor = int(l[3].split(" ")[-1])
|
|
true = int(l[4].split(" ")[-1])
|
|
false = int(l[5].split(" ")[-1])
|
|
monkeys.append(Monkey(index, items, operation,mul, divisor, true, false))
|
|
|
|
|
|
for round in range(20):
|
|
#print(round)
|
|
for monkey in monkeys:
|
|
if len(monkey.items) == 0:
|
|
continue
|
|
else:
|
|
items, targets = monkey.business()
|
|
for i in range(len(items)):
|
|
monkeys[targets[i]].items.append(items[i])
|
|
|
|
active = []
|
|
for m in monkeys:
|
|
active.append(m.activity)
|
|
|
|
active = sorted(active)
|
|
|
|
print(active[-1] * active[-2]) |