solution for day 11
This commit is contained in:
parent
d5574c1167
commit
bf600501fa
163
11/code.js
Normal file
163
11/code.js
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
|
||||||
|
const sampleMonkeys = [
|
||||||
|
[
|
||||||
|
[79, 98],
|
||||||
|
['*', 19],
|
||||||
|
[23, 2, 3],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[54, 65, 75, 74],
|
||||||
|
['+', 6],
|
||||||
|
[19, 2, 0],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[79, 60, 97],
|
||||||
|
['*', 'self'],
|
||||||
|
[13, 1, 3],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[74],
|
||||||
|
['+', 3],
|
||||||
|
[17, 0, 1],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
]
|
||||||
|
|
||||||
|
const inputMonkeys = [
|
||||||
|
[
|
||||||
|
[91, 58, 52, 69, 95, 54],
|
||||||
|
['*', 13],
|
||||||
|
[7, 1, 5],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[80, 80, 97, 84],
|
||||||
|
['*', 'self'],
|
||||||
|
[3, 3, 5],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[86, 92, 71],
|
||||||
|
['+', 7],
|
||||||
|
[2, 0, 4],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[96, 90, 99, 76, 79, 85, 98, 61],
|
||||||
|
['+', 4],
|
||||||
|
[11, 7, 6],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[60, 83, 68, 64, 73],
|
||||||
|
['*', 19],
|
||||||
|
[17, 1, 0],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[96, 52, 52, 94, 76, 51, 57],
|
||||||
|
['+', 3],
|
||||||
|
[5, 7, 3],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[75],
|
||||||
|
['+', 5],
|
||||||
|
[13, 4, 2],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[83, 75],
|
||||||
|
['+', 1],
|
||||||
|
[19, 2, 6],
|
||||||
|
0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
// Part One
|
||||||
|
//let monkeys = JSON.parse(JSON.stringify(sampleMonkeys));
|
||||||
|
let monkeys = JSON.parse(JSON.stringify(inputMonkeys));
|
||||||
|
|
||||||
|
for (let i = 0; i < 20; i++) {
|
||||||
|
for (const m in monkeys) {
|
||||||
|
const items = monkeys[m][0];
|
||||||
|
const op = monkeys[m][1];
|
||||||
|
const test = monkeys[m][2];
|
||||||
|
for (const item of items) {
|
||||||
|
monkeys[m][3]++;
|
||||||
|
let newLevel;
|
||||||
|
if (op[0] === '*') {
|
||||||
|
if (op[1] === 'self') {
|
||||||
|
newLevel = item * item;
|
||||||
|
} else {
|
||||||
|
newLevel = item * op[1];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newLevel = item + op[1];
|
||||||
|
}
|
||||||
|
newLevel = Math.floor(newLevel / 3);
|
||||||
|
if (newLevel % test[0] === 0) {
|
||||||
|
monkeys[test[1]][0].push(newLevel);
|
||||||
|
} else {
|
||||||
|
monkeys[test[2]][0].push(newLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
monkeys[m][0] = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let counts = monkeys.map(m => m[3]);
|
||||||
|
counts.sort(function(a, b) {
|
||||||
|
return b - a;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(counts[0] * counts[1]);
|
||||||
|
|
||||||
|
|
||||||
|
// Part Two
|
||||||
|
//monkeys = JSON.parse(JSON.stringify(sampleMonkeys));
|
||||||
|
monkeys = JSON.parse(JSON.stringify(inputMonkeys));
|
||||||
|
|
||||||
|
// Common denominator trick to keep numbers small outright stolen from
|
||||||
|
// https://git.genehack.net/genehack/advent-of-code-2022/src/branch/main/11/day11_2.js
|
||||||
|
let COMMON = 1;
|
||||||
|
for (const monkey of monkeys) {
|
||||||
|
COMMON *= monkey[2][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < 10000; i++) {
|
||||||
|
for (const m in monkeys) {
|
||||||
|
const items = monkeys[m][0];
|
||||||
|
const op = monkeys[m][1];
|
||||||
|
const test = monkeys[m][2];
|
||||||
|
for (const n in items) {
|
||||||
|
monkeys[m][3] = monkeys[m][3] + 1;
|
||||||
|
let newLevel;
|
||||||
|
if (op[0] === '*') {
|
||||||
|
if (op[1] === 'self') {
|
||||||
|
newLevel = monkeys[m][0][n] ** 2;
|
||||||
|
} else {
|
||||||
|
newLevel = monkeys[m][0][n] * op[1];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newLevel = monkeys[m][0][n] + op[1];
|
||||||
|
}
|
||||||
|
newLevel = newLevel % COMMON
|
||||||
|
const pass = newLevel % (test[0]) == 0 ? true : false;
|
||||||
|
monkeys[pass ? test[1] : test[2]][0].push(newLevel);
|
||||||
|
}
|
||||||
|
monkeys[m][0] = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
counts = monkeys.map(m => m[3]);
|
||||||
|
counts.sort(function(a, b) {
|
||||||
|
return b - a;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(counts[0] * counts[1]);
|
||||||
|
|
||||||
|
// functions
|
106
11/input.txt
Normal file
106
11/input.txt
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
const inputMonkeys = [
|
||||||
|
[
|
||||||
|
[91, 58, 52, 69, 95, 54],
|
||||||
|
['*' 13],
|
||||||
|
[7, 1, 5],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[80, 80, 97, 84],
|
||||||
|
['*' 'self'],
|
||||||
|
[3, 3, 5],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[86, 92, 71],
|
||||||
|
['+' 7],
|
||||||
|
[2, 0, 4],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[96, 90, 99, 76, 79, 85, 98, 61],
|
||||||
|
['+' 4],
|
||||||
|
[11, 7, 6],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[60, 83, 68, 64, 73],
|
||||||
|
['*' 19],
|
||||||
|
[17, 1, 0],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[96, 52, 52, 94, 76, 51, 57],
|
||||||
|
['+' 3],
|
||||||
|
[5, 7, 3],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[75],
|
||||||
|
['+' 5],
|
||||||
|
[13, 4, 2],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[83, 75],
|
||||||
|
['+' 1],
|
||||||
|
[19, 2, 6],
|
||||||
|
0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
Monkey 0:
|
||||||
|
Starting items: 91, 58, 52, 69, 95, 54
|
||||||
|
Operation: new = old * 13
|
||||||
|
Test: divisible by 7
|
||||||
|
If true: throw to monkey 1
|
||||||
|
If false: throw to monkey 5
|
||||||
|
|
||||||
|
Monkey 1:
|
||||||
|
Starting items: 80, 80, 97, 84
|
||||||
|
Operation: new = old * old
|
||||||
|
Test: divisible by 3
|
||||||
|
If true: throw to monkey 3
|
||||||
|
If false: throw to monkey 5
|
||||||
|
|
||||||
|
Monkey 2:
|
||||||
|
Starting items: 86, 92, 71
|
||||||
|
Operation: new = old + 7
|
||||||
|
Test: divisible by 2
|
||||||
|
If true: throw to monkey 0
|
||||||
|
If false: throw to monkey 4
|
||||||
|
|
||||||
|
Monkey 3:
|
||||||
|
Starting items: 96, 90, 99, 76, 79, 85, 98, 61
|
||||||
|
Operation: new = old + 4
|
||||||
|
Test: divisible by 11
|
||||||
|
If true: throw to monkey 7
|
||||||
|
If false: throw to monkey 6
|
||||||
|
|
||||||
|
Monkey 4:
|
||||||
|
Starting items: 60, 83, 68, 64, 73
|
||||||
|
Operation: new = old * 19
|
||||||
|
Test: divisible by 17
|
||||||
|
If true: throw to monkey 1
|
||||||
|
If false: throw to monkey 0
|
||||||
|
|
||||||
|
Monkey 5:
|
||||||
|
Starting items: 96, 52, 52, 94, 76, 51, 57
|
||||||
|
Operation: new = old + 3
|
||||||
|
Test: divisible by 5
|
||||||
|
If true: throw to monkey 7
|
||||||
|
If false: throw to monkey 3
|
||||||
|
|
||||||
|
Monkey 6:
|
||||||
|
Starting items: 75
|
||||||
|
Operation: new = old + 5
|
||||||
|
Test: divisible by 13
|
||||||
|
If true: throw to monkey 4
|
||||||
|
If false: throw to monkey 2
|
||||||
|
|
||||||
|
Monkey 7:
|
||||||
|
Starting items: 83, 75
|
||||||
|
Operation: new = old + 1
|
||||||
|
Test: divisible by 19
|
||||||
|
If true: throw to monkey 2
|
||||||
|
If false: throw to monkey 6
|
54
11/sample.txt
Normal file
54
11/sample.txt
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
const sampleMonkeys = [
|
||||||
|
[
|
||||||
|
[79, 98],
|
||||||
|
['*', 19],
|
||||||
|
[23, 2, 3],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[54, 65, 75, 74],
|
||||||
|
['+', 6],
|
||||||
|
[19, 2, 0],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[79, 60, 97],
|
||||||
|
['*', 'self'],
|
||||||
|
[13, 1, 3],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[74],
|
||||||
|
['+', 3],
|
||||||
|
[17, 0, 1],
|
||||||
|
0
|
||||||
|
],
|
||||||
|
]
|
Loading…
Reference in New Issue
Block a user