11
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
from math import prod
|
||||
|
||||
def make_monkeys():
|
||||
monkeys = {
|
||||
0: [
|
||||
[63, 84, 80, 83, 84, 53, 88, 72],
|
||||
lambda x: x*11,
|
||||
lambda x: x%13==0,
|
||||
4, 7],
|
||||
1: [
|
||||
[67, 56, 92, 88, 84],
|
||||
lambda x: x+4,
|
||||
lambda x: x%11==0,
|
||||
5, 3],
|
||||
2: [
|
||||
[52],
|
||||
lambda x: x*x,
|
||||
lambda x: x%2==0,
|
||||
3, 1],
|
||||
3: [
|
||||
[59, 53, 60, 92, 69, 72],
|
||||
lambda x: x+2,
|
||||
lambda x: x%5==0,
|
||||
5, 6],
|
||||
4: [
|
||||
[61, 52, 55, 61],
|
||||
lambda x: x+3,
|
||||
lambda x: x%7==0,
|
||||
7, 2],
|
||||
5: [
|
||||
[79, 53],
|
||||
lambda x: x+1,
|
||||
lambda x: x%3==0,
|
||||
0, 6],
|
||||
6: [
|
||||
[59, 86, 67, 95, 92, 77, 91],
|
||||
lambda x: x+5,
|
||||
lambda x: x%19==0,
|
||||
4, 0],
|
||||
7: [
|
||||
[58, 83, 89],
|
||||
lambda x: x*19,
|
||||
lambda x: x%17==0,
|
||||
2, 1],
|
||||
}
|
||||
return monkeys
|
||||
|
||||
def reduce_worry(item):
|
||||
return item//3
|
||||
|
||||
def turn(monkey, i, monkey_business, reduce_worry=lambda x: x):
|
||||
items, inspect, test, left, right = monkey
|
||||
while items:
|
||||
item = items.pop(0)
|
||||
item = inspect(item)
|
||||
monkey_business[i] += 1
|
||||
item = reduce_worry(item)
|
||||
if test(item):
|
||||
monkeys[left][0].append(item)
|
||||
else:
|
||||
monkeys[right][0].append(item)
|
||||
|
||||
def make_turns(n, reduce_worry=lambda x: x):
|
||||
global monkeys
|
||||
monkeys = make_monkeys()
|
||||
monkey_business = {i:0 for i in range(8)}
|
||||
for _ in range(n):
|
||||
for i in range(8):
|
||||
turn(monkeys[i], i, monkey_business, reduce_worry)
|
||||
return prod(sorted(monkey_business.values())[-2:])
|
||||
|
||||
print(make_turns(20, reduce_worry))
|
||||
|
||||
mods = [13, 11, 2, 5, 7, 3, 19, 17]
|
||||
M = prod(mods)
|
||||
|
||||
print(make_turns(10_000, lambda x: x%M))
|
||||
@@ -0,0 +1,55 @@
|
||||
Monkey 0:
|
||||
Starting items: 63, 84, 80, 83, 84, 53, 88, 72
|
||||
Operation: new = old * 11
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 4
|
||||
If false: throw to monkey 7
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 67, 56, 92, 88, 84
|
||||
Operation: new = old + 4
|
||||
Test: divisible by 11
|
||||
If true: throw to monkey 5
|
||||
If false: throw to monkey 3
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 52
|
||||
Operation: new = old * old
|
||||
Test: divisible by 2
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 1
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 59, 53, 60, 92, 69, 72
|
||||
Operation: new = old + 2
|
||||
Test: divisible by 5
|
||||
If true: throw to monkey 5
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 4:
|
||||
Starting items: 61, 52, 55, 61
|
||||
Operation: new = old + 3
|
||||
Test: divisible by 7
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 2
|
||||
|
||||
Monkey 5:
|
||||
Starting items: 79, 53
|
||||
Operation: new = old + 1
|
||||
Test: divisible by 3
|
||||
If true: throw to monkey 0
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 6:
|
||||
Starting items: 59, 86, 67, 95, 92, 77, 91
|
||||
Operation: new = old + 5
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 4
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 7:
|
||||
Starting items: 58, 83, 89
|
||||
Operation: new = old * 19
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 1
|
||||
Reference in New Issue
Block a user