Day 11

Part 1

  • Read in input file
with open("day11/input.txt") as f:
    input = f.read().splitlines()

First 100 lines of input looks like this:

['Monkey 0:',
 '  Starting items: 92, 73, 86, 83, 65, 51, 55, 93',
 '  Operation: new = old * 5',
 '  Test: divisible by 11',
 '    If true: throw to monkey 3',
 '    If false: throw to monkey 4',
 '',
 'Monkey 1:',
 '  Starting items: 99, 67, 62, 61, 59, 98',
 '  Operation: new = old * old',
 '  Test: divisible by 2',
 '    If true: throw to monkey 6',
 '    If false: throw to monkey 7',
 '',
 'Monkey 2:',
 '  Starting items: 81, 89, 56, 61, 99',
 '  Operation: new = old * 7',
 '  Test: divisible by 5',
 '    If true: throw to monkey 1',
 '    If false: throw to monkey 5',
 '',
 'Monkey 3:',
 '  Starting items: 97, 74, 68',
 '  Operation: new = old + 1',
 '  Test: divisible by 17',
 '    If true: throw to monkey 2',
 '    If false: throw to monkey 5',
 '',
 'Monkey 4:',
 '  Starting items: 78, 73',
 '  Operation: new = old + 3',
 '  Test: divisible by 19',
 '    If true: throw to monkey 2',
 '    If false: throw to monkey 3',
 '',
 'Monkey 5:',
 '  Starting items: 50',
 '  Operation: new = old + 5',
 '  Test: divisible by 7',
 '    If true: throw to monkey 1',
 '    If false: throw to monkey 6',
 '',
 'Monkey 6:',
 '  Starting items: 95, 88, 53, 75',
 '  Operation: new = old + 8',
 '  Test: divisible by 3',
 '    If true: throw to monkey 0',
 '    If false: throw to monkey 7',
 '',
 'Monkey 7:',
 '  Starting items: 50, 77, 98, 85, 94, 56, 89',
 '  Operation: new = old + 2',
 '  Test: divisible by 13',
 '    If true: throw to monkey 4',
 '    If false: throw to monkey 0']
  • Generate list of monkeys

  • have them run rounds

  • compute monkey business

  • Finally the answer for part 1 given the input

monkeys = list(generate_monkeys(input, divisor=3))
monkeys = run_rounds(monkeys)
mbusiness = monkey_business(monkeys)


print(f'the correct answer for part 1 is {mbusiness}')
the correct answer for part 1 is 120756

Part 2

lcm = extract_lcm(input)
monkeys = list(generate_monkeys(input,modulo=lcm, divisor=1))
monkeys = run_rounds(monkeys, rounds=10_000)
print('done!')
done!
mbusiness2 = monkey_business(monkeys)
print(f'the correct answer for part 2 is {mbusiness2}')
the correct answer for part 2 is 39109444654