Day 11
This commit is contained in:
55
day11/input.txt
Normal file
55
day11/input.txt
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
Monkey 0:
|
||||||
|
Starting items: 71, 56, 50, 73
|
||||||
|
Operation: new = old * 11
|
||||||
|
Test: divisible by 13
|
||||||
|
If true: throw to monkey 1
|
||||||
|
If false: throw to monkey 7
|
||||||
|
|
||||||
|
Monkey 1:
|
||||||
|
Starting items: 70, 89, 82
|
||||||
|
Operation: new = old + 1
|
||||||
|
Test: divisible by 7
|
||||||
|
If true: throw to monkey 3
|
||||||
|
If false: throw to monkey 6
|
||||||
|
|
||||||
|
Monkey 2:
|
||||||
|
Starting items: 52, 95
|
||||||
|
Operation: new = old * old
|
||||||
|
Test: divisible by 3
|
||||||
|
If true: throw to monkey 5
|
||||||
|
If false: throw to monkey 4
|
||||||
|
|
||||||
|
Monkey 3:
|
||||||
|
Starting items: 94, 64, 69, 87, 70
|
||||||
|
Operation: new = old + 2
|
||||||
|
Test: divisible by 19
|
||||||
|
If true: throw to monkey 2
|
||||||
|
If false: throw to monkey 6
|
||||||
|
|
||||||
|
Monkey 4:
|
||||||
|
Starting items: 98, 72, 98, 53, 97, 51
|
||||||
|
Operation: new = old + 6
|
||||||
|
Test: divisible by 5
|
||||||
|
If true: throw to monkey 0
|
||||||
|
If false: throw to monkey 5
|
||||||
|
|
||||||
|
Monkey 5:
|
||||||
|
Starting items: 79
|
||||||
|
Operation: new = old + 7
|
||||||
|
Test: divisible by 2
|
||||||
|
If true: throw to monkey 7
|
||||||
|
If false: throw to monkey 0
|
||||||
|
|
||||||
|
Monkey 6:
|
||||||
|
Starting items: 77, 55, 63, 93, 66, 90, 88, 71
|
||||||
|
Operation: new = old * 7
|
||||||
|
Test: divisible by 11
|
||||||
|
If true: throw to monkey 2
|
||||||
|
If false: throw to monkey 4
|
||||||
|
|
||||||
|
Monkey 7:
|
||||||
|
Starting items: 54, 97, 87, 70, 59, 82, 59
|
||||||
|
Operation: new = old + 8
|
||||||
|
Test: divisible by 17
|
||||||
|
If true: throw to monkey 1
|
||||||
|
If false: throw to monkey 3
|
||||||
35
day11/part1.py
Normal file
35
day11/part1.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
lines = (x.strip() for x in open("input.txt"))
|
||||||
|
monkeys = []
|
||||||
|
|
||||||
|
|
||||||
|
def create_op(op_line):
|
||||||
|
if "old * old" in op_line:
|
||||||
|
return lambda x: x**2
|
||||||
|
val = int(op_line[6:])
|
||||||
|
if "*" in op_line:
|
||||||
|
return lambda x: x*val
|
||||||
|
return lambda x: x+val
|
||||||
|
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
monkeys.append({
|
||||||
|
"items": [*map(int, next(lines)[16:].split(", "))],
|
||||||
|
"op": create_op(next(lines)[17:]),
|
||||||
|
"div": int(next(lines)[19:]),
|
||||||
|
"if_true": int(next(lines)[25:]),
|
||||||
|
"if_false": int(next(lines)[26:]),
|
||||||
|
"count": 0
|
||||||
|
})
|
||||||
|
next(lines, None)
|
||||||
|
|
||||||
|
for _ in range(20):
|
||||||
|
for idx, monkey in enumerate(monkeys):
|
||||||
|
while monkey['items']:
|
||||||
|
monkey['count'] += 1
|
||||||
|
worry = monkey['op'](monkey['items'].pop(0)) // 3
|
||||||
|
monkeys[monkey['if_true' if worry % monkey['div'] == 0 else 'if_false']]['items'].append(worry)
|
||||||
|
|
||||||
|
insp = sorted(monkey['count'] for monkey in monkeys)
|
||||||
|
print(insp[-2]*insp[-1])
|
||||||
38
day11/part2.py
Normal file
38
day11/part2.py
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
from functools import reduce
|
||||||
|
|
||||||
|
lines = (x.strip() for x in open("input.txt"))
|
||||||
|
monkeys = []
|
||||||
|
|
||||||
|
|
||||||
|
def create_op(op_line):
|
||||||
|
if "old * old" in op_line:
|
||||||
|
return lambda x: x**2
|
||||||
|
val = int(op_line[6:])
|
||||||
|
if "*" in op_line:
|
||||||
|
return lambda x: x*val
|
||||||
|
return lambda x: x+val
|
||||||
|
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
monkeys.append({
|
||||||
|
"items": [*map(int, next(lines)[16:].split(", "))],
|
||||||
|
"op": create_op(next(lines)[17:]),
|
||||||
|
"div": int(next(lines)[19:]),
|
||||||
|
"if_true": int(next(lines)[25:]),
|
||||||
|
"if_false": int(next(lines)[26:]),
|
||||||
|
"count": 0
|
||||||
|
})
|
||||||
|
next(lines, None)
|
||||||
|
|
||||||
|
divisor = reduce(lambda x, y: x*y, set(monkey['div'] for monkey in monkeys))
|
||||||
|
|
||||||
|
for _ in range(10000):
|
||||||
|
for monkey in monkeys:
|
||||||
|
while monkey['items']:
|
||||||
|
monkey['count'] += 1
|
||||||
|
worry = monkey['op'](monkey['items'].pop(0)) % divisor
|
||||||
|
monkeys[monkey['if_true' if worry % monkey['div'] == 0 else 'if_false']]['items'].append(worry)
|
||||||
|
|
||||||
|
insp = sorted(monkey['count'] for monkey in monkeys)
|
||||||
|
print(insp[-2]*insp[-1])
|
||||||
Reference in New Issue
Block a user