const sample = await Deno.readTextFile("sample.txt"); const input = await Deno.readTextFile("input.txt"); const parseInputData1 = (data: string): [number, number][] => { const lines = data.trim().split("\n").filter(Boolean); const [times, distances] = lines .map((line) => line .split(/:\ +/)[1] .split(/\ +/) .map(Number) ); return times.map((time, i) => [time, distances[i]]); }; const solvePart1 = (data: string): number => { const races = parseInputData1(data); return races .map(([time, distance]) => Array.from(new Array(time), (_, i) => i).map(( t, ) => [distance, t * (time - t)]) .filter(([distance, total]) => total > distance) ).map((winingRaces) => winingRaces.length) .reduce((s, v) => s * v); }; console.log("Sample:", solvePart1(sample)); // 286 console.log("Input", solvePart1(input)); // 227850 const parseInputData2 = (data: string): [number, number] => { const lines = data.trim().split("\n").filter(Boolean); const [time, distance] = lines .map((line) => Number(line .split(/:\ +/)[1] .replace(/\ +/g, '')) ); return [time, distance] }; const solvePart2 = (data: string): number => { const [time, distance] = parseInputData2(data); let result = 0; for (let t = 0; t < time ; t += 1) { const total = t * (time - t) if (total > distance) result++ } return result } console.log("Sample:", solvePart2(sample)); // 71503 console.log("Input", solvePart2(input)); // 42948149