expeditaet
Version:
Advent of Code Solutions
32 lines (26 loc) • 961 B
text/typescript
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { task } from '@alexaegis/advent-of-code-lib';
import { sum } from '@alexaegis/advent-of-code-lib/math';
import packageJson from '../package.json';
import { parse } from './parse.function.js';
export type SpaceCardDecks = Record<1 | 2, number[]>;
export const scoreDecks = (decks: SpaceCardDecks): number => {
const winnerDeck = decks[1].length === 0 ? decks[2] : decks[1];
return winnerDeck.map((a, i) => a * (winnerDeck.length - i)).reduce(sum);
};
export const p1 = (input: string): number => {
const decks = parse(input);
for (;;) {
const p1card = decks[1].shift()!;
const p2card = decks[2].shift()!;
if (p1card > p2card) {
decks[1].push(p1card, p2card);
} else if (p2card > p1card) {
decks[2].push(p2card, p1card);
}
if (decks[1].length === 0 || decks[2].length === 0) {
return scoreDecks(decks);
}
}
};
await task(p1, packageJson.aoc); // 31455 ~0.06ms