expeditaet
Version:
Advent of Code Solutions
47 lines (36 loc) • 1.11 kB
text/typescript
import { task } from '@alexaegis/advent-of-code-lib';
import packageJson from '../package.json';
export const calculate =
(target: number) =>
(input: string): number => {
const numbers = input.split(',').map((a) => Number.parseInt(a, 10));
const map = new Map<number, { turn: number; prevTurn: number | undefined }>();
let lastNumber = 0;
for (let i = 1; i <= target; i++) {
if (i <= numbers.length) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
lastNumber = numbers[i - 1]!;
map.set(lastNumber, { turn: i, prevTurn: undefined });
continue;
}
const c = map.get(lastNumber);
let result: number;
if (c) {
result = c.prevTurn ? c.turn - c.prevTurn : 0;
} else {
result = 0;
map.set(lastNumber, { turn: i, prevTurn: undefined });
}
const r = map.get(result);
if (r) {
r.prevTurn = r.turn;
r.turn = i;
} else {
map.set(result, { turn: i, prevTurn: undefined });
}
lastNumber = result;
}
return lastNumber;
};
export const p1 = calculate(2020);
await task(p1, packageJson.aoc); // 1015 ~0.08ms