expeditaet
Version:
Advent of Code Solutions
34 lines (30 loc) • 923 B
text/typescript
import { task } from '@alexaegis/advent-of-code-lib';
import packageJson from '../package.json';
import { calculateVariations, parse, type SpringLog } from './parse.js';
const unfoldEntry =
(times: number) =>
(entry: SpringLog): SpringLog => ({
...entry,
log: Array.from({ length: times })
.map(() => entry.log)
.join('?'),
criteria: Array.from({ length: times }).flatMap(() => entry.criteria),
});
export const p2 = (input: string): number =>
parse(input)
.map(unfoldEntry(5))
.map((entry) => {
const [currentCriteria, ...remainingCriteria] = entry.criteria;
if (!currentCriteria) {
throw new Error('no criteria for line');
}
return calculateVariations({
currentCriteria,
currentOriginalCriteria: currentCriteria,
rebuiltLog: '',
remainingCriteria,
remainingDamagedLog: entry.log,
});
})
.sum();
await task(p2, packageJson.aoc); // 7030194981795 ~539.06ms