From a6d7b402d58fac7b4514418c0899974620115576 Mon Sep 17 00:00:00 2001 From: benkyd Date: Sun, 11 Dec 2022 15:57:11 +0000 Subject: [PATCH] 11 part 1 --- 2022/11.input | 27 +++++++++++++++++++++++++++ 2022/11.js | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/2022/11.input b/2022/11.input index e69de29..c04eddb 100644 --- a/2022/11.input +++ b/2022/11.input @@ -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 \ No newline at end of file diff --git a/2022/11.js b/2022/11.js index e69de29..c4cd66a 100644 --- a/2022/11.js +++ b/2022/11.js @@ -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}`);