UNPKG

expeditaet

Version:
45 lines (42 loc) 1.26 kB
import { task } from '@alexaegis/advent-of-code-lib'; import packageJson from '../package.json'; import { interpreter } from './interpreter.function.js'; export const p2 = (input: string): number | undefined => { const cave = interpreter(input); if (cave) { cave.normalize(); // console.log(`i: 0 cave: ${cave.toString()}`); const counts = []; const scores: number[] = []; for (let i = 0; i < 200; i++) { let nextGen = '..'; for (let p = 2; p < cave.row.length - 2; p++) { const char = cave.row.charAt(p); if (cave.rules.includes(cave.row.slice(p - 2, p + 3))) { nextGen += char === '.' ? '#' : '.'; } else { nextGen += char; } } cave.row = nextGen; cave.normalize(); counts.push(cave.count()); scores.push(cave.score()); // console.log(`i: ${i + 1} cave: ${cave.toString()}`); if ( counts.length > 4 && counts.slice(-4, counts.length).every((next, _, arr) => next === arr[0]) ) { // console.log(`Stabilized, extrapolating to 50000000000`); scores.push( scores.last() + (scores.last() - scores.last(1)) * (50_000_000_000 - i - 1), ); break; } } return scores.pop(); } else { return undefined; } }; await task(p2, packageJson.aoc); // 4400000000304 ~11ms