11 part 1

This commit is contained in:
benkyd
2022-12-11 15:57:11 +00:00
parent 22a432e60c
commit a6d7b402d5
2 changed files with 76 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
Monkey 0:
Starting items: 79, 98
Operation: new = old * 19
Test: divisible by 23
If true: throw to monkey 2
If false: throw to monkey 3
Monkey 1:
Starting items: 54, 65, 75, 74
Operation: new = old + 6
Test: divisible by 19
If true: throw to monkey 2
If false: throw to monkey 0
Monkey 2:
Starting items: 79, 60, 97
Operation: new = old * old
Test: divisible by 13
If true: throw to monkey 1
If false: throw to monkey 3
Monkey 3:
Starting items: 74
Operation: new = old + 3
Test: divisible by 17
If true: throw to monkey 0
If false: throw to monkey 1

View File

@@ -0,0 +1,49 @@
const fs = require('fs');
const { default: test } = require('node:test');
const monkeys = [];
// parse monkeys
const parseMonkeys = (monkeyString) => {
const lines = monkeyString.split('\n');
const startingItems = lines[1].split(':')[1].split(',').map(x => BigInt(x));
const op = lines[2].split('new = ')[1].split('');
const test = {
divis: parseInt(lines[3].split('by ')[1]),
pass: parseInt(lines[4].split('monkey')[1]),
fail: parseInt(lines[5].split('monkey')[1]),
};
monkeys.push({
inventory: startingItems,
operation: op,
test: test,
inspections: 0,
});
}
const input = fs.readFileSync('11.input').toString().split('\n\n');
for (const monkey of input) parseMonkeys(monkey);
for (let round = 0; round < 10000; round++) {
for (let i in monkeys) {
const monkey = monkeys[i];
for (let j in monkey.inventory) {
const item = monkey.inventory[j];
monkey.inspections++;
const old = item; // for eval
let newWorry = Math.floor(eval(monkey.operation));
if (newWorry % monkey.test.divis === 0) {
monkeys[monkey.test.pass].inventory.push(newWorry);
} else {
monkeys[monkey.test.fail].inventory.push(newWorry);
}
}
monkey.inventory = [];
}
}
console.log(monkeys);
console.log(`Part 1: ${monkeys.sort((a, b) => b.inspections - a.inspections)[0].inspections * monkeys.sort((a, b) => b.inspections - a.inspections)[1].inspections}`);