Day 04

import Solution from "./solution.ts";

const num = /\d+/g;

const task = new Solution(
  (arr: { yours: number[]; win: number[] }[]) =>
    arr.reduce(
      (p, c) =>
        p +
        c.yours.reduce(
          (pn, n) => (c.win.includes(n) ? (pn === 0 ? 1 : pn * 2) : pn),
          0
        ),
      0
    ),
  (arr: { yours: number[]; win: number[] }[]) => {
    const cards = new Map<number, number>();
    for (let i = 0; i < arr.length; i++) {
      if (!cards.has(i)) {
        cards.set(i, 1);
      }
      const card = arr[i];
      const wins = card.yours.filter((n) => card.win.includes(n)).length;
      for (let j = 1; j <= wins; j++) {
        if (i + j < arr.length) {
          cards.set(i + j, (cards.get(i + j) ?? 1) + (cards.get(i) ?? 0));
        }
      }
    }
    return [...cards.values()].reduce((p, c) => p + c, 0);
  },
  {
    transform: (l) => {
      const [_, win, yours] = l.split(/[:\|]/);
      return {
        win: win.match(num)?.map((n) => Number.parseInt(n)) ?? [],
        yours: yours.match(num)?.map((n) => Number.parseInt(n)) ?? [],
      };
    },
    sep: "\n",
  }
);
task.expect(13, 30);

export default task;

Last edited 04. April 2025 13:29