UNPKG

expeditaet

Version:
48 lines (40 loc) 1.21 kB
/* 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