-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
p2.ts
44 lines (42 loc) · 1.23 KB
/
p2.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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