expeditaet
Version:
Advent of Code Solutions
48 lines (40 loc) • 1.21 kB
text/typescript
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { task } from '@alexaegis/advent-of-code-lib';
import packageJson from '../package.json';
import { scoreDecks, type SpaceCardDecks } from './p1.js';
import { parse } from './parse.function.js';
const playGame = (decks: SpaceCardDecks, history = new Set<string>()): number => {
for (;;) {
const p1card = decks[1].shift()!;
const p2card = decks[2].shift()!;
const deckState = JSON.stringify(decks);
if (history.has(deckState)) {
return 1;
} else {
history.add(deckState);
}
let winner = p1card > p2card ? 1 : p2card > p1card ? 2 : undefined;
if (decks[1].length >= p1card && decks[2].length >= p2card) {
winner = playGame({
'1': decks[1].slice(0, p1card),
'2': decks[2].slice(0, p2card),
});
}
if (winner === 1) {
decks[1].push(p1card, p2card);
} else if (winner === 2) {
decks[2].push(p2card, p1card);
}
if (decks[1].length === 0) {
return 2;
} else if (decks[2].length === 0) {
return 1;
}
}
};
export const p2 = (input: string): number => {
const decks = parse(input);
playGame(decks);
return scoreDecks(decks);
};
await task(p2, packageJson.aoc); // 32528 ~1495.10ms