2024 day 11 in javascript
This commit is contained in:
parent
506b111226
commit
7b0b6393a8
42
2024/11/solution.js
Normal file
42
2024/11/solution.js
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
|
||||||
|
const input = (await Bun.file(Bun.argv[2]).text()).trim()
|
||||||
|
const stones = input.split(" ").map(num => parseInt(num))
|
||||||
|
|
||||||
|
const splits = num => countDigits(num) % 2 == 0;
|
||||||
|
|
||||||
|
const countDigits = num => Math.floor(Math.log10(num)) + 1;
|
||||||
|
|
||||||
|
const getLeft = num => Math.floor(num / Math.pow(10, countDigits(num) / 2));
|
||||||
|
const getRight = num => num - getLeft(num) * Math.pow(10, countDigits(num) / 2);
|
||||||
|
|
||||||
|
const memo = new Map();
|
||||||
|
|
||||||
|
const blinkTimes = (times, num) => {
|
||||||
|
if (times == 0) return 1;
|
||||||
|
const key = times + '*' + num;
|
||||||
|
if (memo.has(key)) {
|
||||||
|
return memo.get(key)
|
||||||
|
}
|
||||||
|
let result
|
||||||
|
if (num === 0) {
|
||||||
|
result = blinkTimes(times-1, 1)
|
||||||
|
} else if (splits(num)) {
|
||||||
|
result = blinkTimes(times-1, getLeft(num)) + blinkTimes(times-1, getRight(num))
|
||||||
|
} else {
|
||||||
|
result = blinkTimes(times-1, num * 2024)
|
||||||
|
}
|
||||||
|
memo.set(key, result)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
let count = 0
|
||||||
|
for (const stone of stones) {
|
||||||
|
count += blinkTimes(25, stone)
|
||||||
|
}
|
||||||
|
console.log("part 1", count)
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
for (const stone of stones) {
|
||||||
|
count += blinkTimes(75, stone)
|
||||||
|
}
|
||||||
|
console.log("part 2", count)
|
Loading…
Reference in a new issue