diff --git a/day11/part1.py b/day11/part1.py index 508f81b..aeafae3 100644 --- a/day11/part1.py +++ b/day11/part1.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 - lines = (x.strip() for x in open("input.txt")) monkeys = [] @@ -14,22 +13,22 @@ def create_op(op_line): 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 - }) + monkeys.append(( + [*map(int, next(lines)[16:].split(", "))], + create_op(next(lines)[17:]), + int(next(lines)[19:]), + int(next(lines)[25:]), + int(next(lines)[26:]), + [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) + for idx, (items, op, div, if_true, if_false, count) in enumerate(monkeys): + while items: + count[0] += 1 + worry = op(items.pop(0)) // 3 + 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]) diff --git a/day11/part2.py b/day11/part2.py index 1dacc5b..3147eb2 100644 --- a/day11/part2.py +++ b/day11/part2.py @@ -15,24 +15,24 @@ def create_op(op_line): 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 - }) + monkeys.append(( + [*map(int, next(lines)[16:].split(", "))], + create_op(next(lines)[17:]), + int(next(lines)[19:]), + int(next(lines)[25:]), + int(next(lines)[26:]), + [0] + )) 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 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) +for _ in range(20): + for idx, (items, op, div, if_true, if_false, count) in enumerate(monkeys): + while items: + count[0] += 1 + worry = op(items.pop(0)) // mod + 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])