2023 - Day 6
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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
|
||||
Reference in New Issue
Block a user