Public
Edited
Dec 6, 2023
Insert cell
Insert cell
Insert cell
function parse(input) {
const lines = input.split("\n");
const times = lines[0].match(/\d+/g).map(Number);
const distances = lines[1].match(/\d+/g).map(Number);
return times.map((time, i) => [time, distances[i]]);
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
function numWinConditions([raceTime, raceLength]) {
const discriminant = Math.sqrt(raceTime * raceTime - 4 * raceLength);
const tcMin = Math.ceil((raceTime - discriminant) / 2);
const tcMax = Math.floor((raceTime + discriminant) / 2);
return tcMax - tcMin + 1;
}
Insert cell
Insert cell
function part1(input) {
return AOC.product(parse(input).map(numWinConditions));
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
function parse2(input) {
const lines = input.split("\n");
return [lines[0].match(/\d+/g).join(""), lines[1].match(/\d+/g).join("")].map(
Number
);
}
Insert cell
function part2(input) {
return numWinConditions(parse2(input));
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more