day 11
This commit is contained in:
@@ -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
|
||||
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
|
||||
38
2022/11.js
38
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}`);
|
||||
|
||||
Reference in New Issue
Block a user