Day 06

import Solution from "./solution.ts";

const num = /\d+/g;

function compoutePoss(time: number, distance: number) {
  const root = Math.sqrt((time / 2) ** 2 - distance);
  const low = Math.floor(time / 2 - root);
  const high = Math.ceil(time / 2 + root);
  return high - low - 1;
}

const task = new Solution(
  (arr: string[]) => {
    const [times, distances] = arr[0]
      .split("\n")
      .map((s) => s.match(num)?.map((n) => Number.parseInt(n)));
    const races = times!.map((t, i) => ({ time: t, distance: distances![i] }));
    return races.reduce((p, c) => {
      return p * compoutePoss(c.time, c.distance);
    }, 1);
  },
  (arr: string[]) => {
    const [time, distance] = arr[0]
      .split("\n")
      .map((s) => Number.parseInt(s.match(num)!.join("")));
    return compoutePoss(time, distance);
  },
  {
    sep: "\n\n",
  }
);
task.expect(288, 71503);

export default task;

Last edited 04. April 2025 13:29