Published
Edited
Dec 10, 2020
Insert cell
Insert cell
input = (await FileAttachment("Avent of Code 2020 - Day 05.txt").text())
.trim()
.split("\n")
Insert cell
test_input = ["FBFBBFFRLR", "BFFFBBFRRR", "FFFBBBFRRR", "BBFFBBFRLL"];
Insert cell
function q1(input) {
let output = [];
for (const pass of input) {
let row = { lb: 0, ub: 127 };
for (let i = 0; i < 7; i++) {
if (pass[i] === "F") row.ub = Math.floor((row.lb + row.ub) * 0.5);
else if (pass[i] === "B") row.lb = Math.ceil((row.lb + row.ub) * 0.5);
}
let column = { lb: 0, ub: 7 };
for (let i = 7; i < 10; i++) {
if (pass[i] === "L")
column.ub = Math.floor((column.lb + column.ub) * 0.5);
else if (pass[i] === "R")
column.lb = Math.ceil((column.lb + column.ub) * 0.5);
}
const id = row.lb * 8 + column.lb;
output.push({ row: row.lb, column: column.lb, id });
}
return output;
}
Insert cell
q1(test_input)
Insert cell
answer1 = (input => Math.max(...input.map(pass => pass.id)))(q1(input))
Insert cell
Insert cell
missing_seats = {
const passes = q1(input).sort((a, b) => a.id - b.id);
const missing = [];
for (let i = 0; i < passes.length - 1; i++) {
const pass = passes[i];
const nextPass = passes[i + 1];
if (nextPass.id - pass.id > 1) missing.push([pass, nextPass]);
}
return {
row: (missing[0][0].row + missing[0][1].row) / 2,
column: (missing[0][0].column + missing[0][1].column) / 2,
id: (missing[0][0].id + missing[0][1].id) / 2,
neighbors: missing
};
}
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