From 4e53a52f9771649ef173039ddb0bb40e039d116c Mon Sep 17 00:00:00 2001 From: benkyd Date: Sun, 11 Dec 2022 18:44:07 +0000 Subject: [PATCH] day 11 --- 2022/11.input | 62 +++++++++++++++++++++++++++++++++++++-------------- 2022/11.js | 38 ++++++++++++++++++++++++++----- 2 files changed, 77 insertions(+), 23 deletions(-) diff --git a/2022/11.input b/2022/11.input index c04eddb..ec27405 100644 --- a/2022/11.input +++ b/2022/11.input @@ -1,27 +1,55 @@ Monkey 0: - Starting items: 79, 98 - Operation: new = old * 19 - Test: divisible by 23 - If true: throw to monkey 2 + Starting items: 54, 61, 97, 63, 74 + Operation: new = old * 7 + Test: divisible by 17 + If true: throw to monkey 5 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 + Starting items: 61, 70, 97, 64, 99, 83, 52, 87 + Operation: new = old + 8 + Test: divisible by 2 + If true: throw to monkey 7 + If false: throw to monkey 6 Monkey 2: - Starting items: 79, 60, 97 - Operation: new = old * old - Test: divisible by 13 + Starting items: 60, 67, 80, 65 + Operation: new = old * 13 + Test: divisible by 5 If true: throw to monkey 1 - If false: throw to monkey 3 + If false: throw to monkey 6 Monkey 3: - Starting items: 74 - Operation: new = old + 3 - Test: divisible by 17 + Starting items: 61, 70, 76, 69, 82, 56 + Operation: new = old + 7 + Test: divisible by 3 + If true: throw to monkey 5 + If false: throw to monkey 2 + +Monkey 4: + Starting items: 79, 98 + Operation: new = old + 2 + Test: divisible by 7 If true: throw to monkey 0 - If false: throw to monkey 1 \ No newline at end of file + If false: throw to monkey 3 + +Monkey 5: + Starting items: 72, 79, 55 + Operation: new = old + 1 + Test: divisible by 13 + If true: throw to monkey 2 + If false: throw to monkey 1 + +Monkey 6: + Starting items: 63 + Operation: new = old + 4 + Test: divisible by 19 + If true: throw to monkey 7 + If false: throw to monkey 4 + +Monkey 7: + Starting items: 72, 51, 93, 63, 80, 86, 81 + Operation: new = old * old + Test: divisible by 11 + If true: throw to monkey 0 + If false: throw to monkey 4 \ No newline at end of file diff --git a/2022/11.js b/2022/11.js index c4cd66a..0236633 100644 --- a/2022/11.js +++ b/2022/11.js @@ -6,8 +6,8 @@ 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 startingItems = lines[1].split(':')[1].split(',').map(x => parseInt(x)); + const op = lines[2].split('new = ')[1]; const test = { divis: parseInt(lines[3].split('by ')[1]), pass: parseInt(lines[4].split('monkey')[1]), @@ -25,7 +25,7 @@ const parseMonkeys = (monkeyString) => { 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 round = 0; round < 20; round++) { for (let i in monkeys) { const monkey = monkeys[i]; @@ -34,8 +34,8 @@ for (let round = 0; round < 10000; round++) { monkey.inspections++; const old = item; // for eval - let newWorry = Math.floor(eval(monkey.operation)); - if (newWorry % monkey.test.divis === 0) { + let newWorry = Math.floor(eval(monkey.operation) / 3); + if (newWorry % monkey.test.divis == 0) { monkeys[monkey.test.pass].inventory.push(newWorry); } else { monkeys[monkey.test.fail].inventory.push(newWorry); @@ -45,5 +45,31 @@ for (let round = 0; round < 10000; round++) { } } -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}`); + +monkeys.length = 0; +for (const monkey of input) parseMonkeys(monkey); + +const product = monkeys.map((monkey) => monkey.test.divis).reduce((acc, n) => acc * n); + +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) % product); + 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(`Part 2: ${monkeys.sort((a, b) => b.inspections - a.inspections)[0].inspections * monkeys.sort((a, b) => b.inspections - a.inspections)[1].inspections}`);