This commit is contained in:
Sebastian Seedorf
2022-12-11 19:45:30 +01:00
parent c717b6bbc6
commit 62525f9165
2 changed files with 30 additions and 31 deletions

View File

@@ -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])

View File

@@ -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])