expeditaet
Version:
Advent of Code Solutions
38 lines (34 loc) • 993 B
text/typescript
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { task } from '@alexaegis/advent-of-code-lib';
import packageJson from '../package.json';
import { parse } from './parse.function.js';
const countBranches = (
jolts: number[],
index: number,
builtIn: number,
cache: Map<number, number> = new Map<number, number>(),
): number => {
const current = jolts[index]!;
if (current === builtIn) {
return 1;
}
let result = 0;
for (let i = 1; i <= 3; i++) {
const next = jolts[index + i]!;
if (next - current <= 3) {
if (cache.has(index + i)) {
result += cache.get(index + i) ?? 0;
} else {
const branchResult = countBranches(jolts, index + i, builtIn, cache);
cache.set(index + i, branchResult);
result += branchResult;
}
}
}
return result;
};
export const p2 = (input: string): number => {
const { jolts, builtIn } = parse(input);
return countBranches(jolts, 0, builtIn);
};
await task(p2, packageJson.aoc); // 169255295254528 ~0.03ms