parent
92455e38b3
commit
c5115a7e11
@ -0,0 +1,27 @@
|
|||||||
|
Monkey 0:
|
||||||
|
Starting items: 79, 98
|
||||||
|
Operation: new = old * 19
|
||||||
|
Test: divisible by 23
|
||||||
|
If true: throw to monkey 2
|
||||||
|
If false: throw to monkey 3
|
||||||
|
|
||||||
|
Monkey 1:
|
||||||
|
Starting items: 54, 65, 75, 74
|
||||||
|
Operation: new = old + 6
|
||||||
|
Test: divisible by 19
|
||||||
|
If true: throw to monkey 2
|
||||||
|
If false: throw to monkey 0
|
||||||
|
|
||||||
|
Monkey 2:
|
||||||
|
Starting items: 79, 60, 97
|
||||||
|
Operation: new = old * old
|
||||||
|
Test: divisible by 13
|
||||||
|
If true: throw to monkey 1
|
||||||
|
If false: throw to monkey 3
|
||||||
|
|
||||||
|
Monkey 3:
|
||||||
|
Starting items: 74
|
||||||
|
Operation: new = old + 3
|
||||||
|
Test: divisible by 17
|
||||||
|
If true: throw to monkey 0
|
||||||
|
If false: throw to monkey 1
|
@ -0,0 +1,71 @@
|
|||||||
|
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])
|
@ -0,0 +1,77 @@
|
|||||||
|
lines = open('input.txt', 'r').read().split("\n\n")
|
||||||
|
lines = [line.splitlines() for line in lines]
|
||||||
|
|
||||||
|
def product(lst):
|
||||||
|
p = 1
|
||||||
|
for i in lst:
|
||||||
|
p *= i
|
||||||
|
return p
|
||||||
|
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)
|
||||||
|
mod = product([m.div for m in monkeys])
|
||||||
|
worry = worry % mod
|
||||||
|
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(10000):
|
||||||
|
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)
|
||||||
|
print(active[-1] * active[-2])
|
@ -0,0 +1,55 @@
|
|||||||
|
Monkey 0:
|
||||||
|
Starting items: 77, 69, 76, 77, 50, 58
|
||||||
|
Operation: new = old * 11
|
||||||
|
Test: divisible by 5
|
||||||
|
If true: throw to monkey 1
|
||||||
|
If false: throw to monkey 5
|
||||||
|
|
||||||
|
Monkey 1:
|
||||||
|
Starting items: 75, 70, 82, 83, 96, 64, 62
|
||||||
|
Operation: new = old + 8
|
||||||
|
Test: divisible by 17
|
||||||
|
If true: throw to monkey 5
|
||||||
|
If false: throw to monkey 6
|
||||||
|
|
||||||
|
Monkey 2:
|
||||||
|
Starting items: 53
|
||||||
|
Operation: new = old * 3
|
||||||
|
Test: divisible by 2
|
||||||
|
If true: throw to monkey 0
|
||||||
|
If false: throw to monkey 7
|
||||||
|
|
||||||
|
Monkey 3:
|
||||||
|
Starting items: 85, 64, 93, 64, 99
|
||||||
|
Operation: new = old + 4
|
||||||
|
Test: divisible by 7
|
||||||
|
If true: throw to monkey 7
|
||||||
|
If false: throw to monkey 2
|
||||||
|
|
||||||
|
Monkey 4:
|
||||||
|
Starting items: 61, 92, 71
|
||||||
|
Operation: new = old * old
|
||||||
|
Test: divisible by 3
|
||||||
|
If true: throw to monkey 2
|
||||||
|
If false: throw to monkey 3
|
||||||
|
|
||||||
|
Monkey 5:
|
||||||
|
Starting items: 79, 73, 50, 90
|
||||||
|
Operation: new = old + 2
|
||||||
|
Test: divisible by 11
|
||||||
|
If true: throw to monkey 4
|
||||||
|
If false: throw to monkey 6
|
||||||
|
|
||||||
|
Monkey 6:
|
||||||
|
Starting items: 50, 89
|
||||||
|
Operation: new = old + 3
|
||||||
|
Test: divisible by 13
|
||||||
|
If true: throw to monkey 4
|
||||||
|
If false: throw to monkey 3
|
||||||
|
|
||||||
|
Monkey 7:
|
||||||
|
Starting items: 83, 56, 64, 58, 93, 91, 56, 65
|
||||||
|
Operation: new = old + 5
|
||||||
|
Test: divisible by 19
|
||||||
|
If true: throw to monkey 1
|
||||||
|
If false: throw to monkey 0
|
Loading…
Reference in new issue