Day 11 Part 2

This commit is contained in:
Chris
2024-12-11 16:13:31 +00:00
parent 8f6ca57372
commit b6e4b27c7b

View File

@@ -8,32 +8,43 @@ const countMap: { [key: string]: Array<number> } = {};
let sum = 0; let sum = 0;
function getCountAfter(stone: string, blink: number) { function getCountAfter(stone: string, blink: number, prev: Array<string> = []): number {
const newStones: Array<string> = []; const nextStep = blink - 1;
stones.forEach((stone) => { if (countMap[stone]) {
if (stone === '0') { if (countMap[stone][nextStep]) {
newStones.push('1'); return countMap[stone][nextStep];
return;
} }
} else {
countMap[stone] = [];
}
let newStones: Array<string>;
if (stone === '0') {
newStones = ['1'];
} else {
const len = stone.length; const len = stone.length;
if (len % 2 === 0) { if (len % 2 === 0) {
newStones.push(stone.slice(0, len / 2));
let last = stone.slice(len / 2); let last = stone.slice(len / 2);
newStones.push(''+(parseInt(last))); newStones = [stone.slice(0, len / 2), ''+parseInt(last)];
return; } else {
newStones = [''+(parseInt(stone) * 2024)];
} }
newStones.push(''+(parseInt(stone) * 2024)); }
}); const len = newStones.length;
countMap[stone][0] = len;
if (blink === 1) { if (blink === 1) {
return newStones; return len;
} else {
const newPrev = [...prev, stone];
const len = newStones.reduce((carry, newStone) => carry + getCountAfter(newStone, nextStep, newPrev), 0);
countMap[stone][nextStep] = len;
return len;
} }
return newStones.sum((newStone) => getCountAfter(newStone, blink - 1));
} }
const blinks = 25; const blinks = 75;
stones.forEach((stone) => { stones.forEach((stone) => {
sum += getCountAfter(stone, 25); sum += getCountAfter(stone, blinks);
}); });
console.log(sum); console.log(sum);