expeditaet
Version:
Advent of Code Solutions
43 lines (36 loc) • 1.06 kB
text/typescript
import { Vec2 } from '@alexaegis/advent-of-code-lib/model';
import { parseSubmarineCommand } from './model/submarine-command.interface.js';
import { SubmarineInstruction } from './model/submarine-instruction.enum.js';
import { task } from '@alexaegis/advent-of-code-lib';
import packageJson from '../package.json';
export const p2 = (input: string): number => {
const result = input
.lines()
.map(parseSubmarineCommand)
.reduce(
(acc, { amplitude, instruction }) => {
switch (instruction) {
case SubmarineInstruction.FORWARD: {
acc.position.addMut({
x: amplitude,
y: acc.aim * amplitude,
});
break;
}
case SubmarineInstruction.DOWN: {
acc.aim = acc.aim + amplitude;
break;
}
case SubmarineInstruction.UP: {
acc.aim = acc.aim - amplitude;
break;
}
// No default
}
return acc;
},
{ position: Vec2.ORIGIN.clone(), aim: 0 },
);
return result.position.x * result.position.y;
};
await task(p2, packageJson.aoc); // 1971232560 ~0.34ms