Day 07

import Solution from "./solution.ts";

function can(
  target: number,
  ns: number[],
  second: boolean,
  current = 0,
): boolean {
  if (current > target) return false;
  if (ns.length === 0) return target === current;
  const next = ns.slice(1);
  return can(target, next, second, current + ns[0]) ||
    can(target, next, second, current * ns[0]) ||
    (second &&
      can(target, next, second, Number.parseInt(current + ns[0].toString())));
}

const task = new Solution(
  (arr: number[][]) =>
    arr.reduce((p, [t, ...ns]) => p + (can(t, ns, false) ? t : 0), 0),
  (arr: number[][]) =>
    arr.reduce((p, [t, ...ns]) => p + (can(t, ns, true) ? t : 0), 0),
  {
    sep: "\n",
    transform: (s) => s.split(/:? /g).map((n) => Number.parseInt(n)),
  },
);
task.expect(3749, 11387);

export default task;

Last edited 02. May 2025 09:01