Day 11
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
lines = (x.strip() for x in open("input.txt"))
|
lines = (x.strip() for x in open("input.txt"))
|
||||||
monkeys = []
|
monkeys = []
|
||||||
|
|
||||||
@@ -14,22 +13,22 @@ def create_op(op_line):
|
|||||||
|
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
monkeys.append({
|
monkeys.append((
|
||||||
"items": [*map(int, next(lines)[16:].split(", "))],
|
[*map(int, next(lines)[16:].split(", "))],
|
||||||
"op": create_op(next(lines)[17:]),
|
create_op(next(lines)[17:]),
|
||||||
"div": int(next(lines)[19:]),
|
int(next(lines)[19:]),
|
||||||
"if_true": int(next(lines)[25:]),
|
int(next(lines)[25:]),
|
||||||
"if_false": int(next(lines)[26:]),
|
int(next(lines)[26:]),
|
||||||
"count": 0
|
[0]
|
||||||
})
|
))
|
||||||
next(lines, None)
|
next(lines, None)
|
||||||
|
|
||||||
for _ in range(20):
|
for _ in range(20):
|
||||||
for idx, monkey in enumerate(monkeys):
|
for idx, (items, op, div, if_true, if_false, count) in enumerate(monkeys):
|
||||||
while monkey['items']:
|
while items:
|
||||||
monkey['count'] += 1
|
count[0] += 1
|
||||||
worry = monkey['op'](monkey['items'].pop(0)) // 3
|
worry = op(items.pop(0)) // 3
|
||||||
monkeys[monkey['if_true' if worry % monkey['div'] == 0 else 'if_false']]['items'].append(worry)
|
monkeys[if_true if worry % div == 0 else if_false][0].append(worry)
|
||||||
|
|
||||||
insp = sorted(monkey['count'] for monkey in monkeys)
|
insp = sorted(monkey[-1][0] for monkey in monkeys)
|
||||||
print(insp[-2]*insp[-1])
|
print(insp[-2]*insp[-1])
|
||||||
|
|||||||
@@ -15,24 +15,24 @@ def create_op(op_line):
|
|||||||
|
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
monkeys.append({
|
monkeys.append((
|
||||||
"items": [*map(int, next(lines)[16:].split(", "))],
|
[*map(int, next(lines)[16:].split(", "))],
|
||||||
"op": create_op(next(lines)[17:]),
|
create_op(next(lines)[17:]),
|
||||||
"div": int(next(lines)[19:]),
|
int(next(lines)[19:]),
|
||||||
"if_true": int(next(lines)[25:]),
|
int(next(lines)[25:]),
|
||||||
"if_false": int(next(lines)[26:]),
|
int(next(lines)[26:]),
|
||||||
"count": 0
|
[0]
|
||||||
})
|
))
|
||||||
next(lines, None)
|
next(lines, None)
|
||||||
|
|
||||||
divisor = reduce(lambda x, y: x*y, set(monkey['div'] for monkey in monkeys))
|
mod = reduce(lambda x, y: x*y, set(monkey[2] for monkey in monkeys))
|
||||||
|
|
||||||
for _ in range(10000):
|
for _ in range(20):
|
||||||
for monkey in monkeys:
|
for idx, (items, op, div, if_true, if_false, count) in enumerate(monkeys):
|
||||||
while monkey['items']:
|
while items:
|
||||||
monkey['count'] += 1
|
count[0] += 1
|
||||||
worry = monkey['op'](monkey['items'].pop(0)) % divisor
|
worry = op(items.pop(0)) // mod
|
||||||
monkeys[monkey['if_true' if worry % monkey['div'] == 0 else 'if_false']]['items'].append(worry)
|
monkeys[if_true if worry % div == 0 else if_false][0].append(worry)
|
||||||
|
|
||||||
insp = sorted(monkey['count'] for monkey in monkeys)
|
insp = sorted(monkey[-1][0] for monkey in monkeys)
|
||||||
print(insp[-2]*insp[-1])
|
print(insp[-2]*insp[-1])
|
||||||
|
|||||||
Reference in New Issue
Block a user