expeditaet
Version:
Advent of Code Solutions
37 lines (30 loc) • 1.02 kB
text/typescript
import { split, task } from '@alexaegis/advent-of-code-lib';
import {
Direction,
Vec2,
isDirectionMarker,
type Vec2Like,
} from '@alexaegis/advent-of-code-lib/model';
import packageJson from '../package.json';
const keypad = [
[undefined, undefined, 1, undefined, undefined],
[undefined, 2, 3, 4, undefined],
[5, 6, 7, 8, 9],
[undefined, 'A', 'B', 'C', undefined],
[undefined, undefined, 'D', undefined, undefined],
].reverse();
const toKeypadNumber = (vec: Vec2Like): number | string | undefined => keypad[vec.y]?.[vec.x];
export const p2 = (input: string): string => {
const position = new Vec2(0, 2);
const result = split(input).reduce((acc, line) => {
for (const direction of [...line]
.filter(isDirectionMarker)
.map((marker) => Direction.fromMarker(marker).reverse('v')))
position.addMut(direction, {
limit: (v) => toKeypadNumber(v) === undefined,
});
return `${acc}${toKeypadNumber(position) ?? ''}`;
}, '');
return result;
};
await task(p2, packageJson.aoc); // 46C91 ~1.9ms