Public
Edited
Dec 26, 2022
2 forks
1 star
Insert cell
Insert cell
Insert cell
data = (which === "sample" ? sample : input).trim().split("\n")
Insert cell
fromSnafu = (s) => {
const map = { 2: 2, 1: 1, 0: 0, "-": -1, "=": -2 };
return [...s].reverse().map(n => map[n]).reduce((s, n, i) => s + n * Math.pow(5, i));
}
Insert cell
fromSnafu("2=-01")
Insert cell
data.map(fromSnafu).map(toSnafu).join("\n") === data.join("\n")
Insert cell
toSnafu = (n) => {
const base5 = [...n.toString(5)].reverse();
for (let i = 0; i < base5.length; i++) {
// debugger;
if (base5[i] == 3) {
base5[i] = "=";
base5[i+1] = +(base5[i+1] ?? 0) + 1;
} else if (base5[i] == 4) {
base5[i] = "-";
base5[i+1] = +(base5[i+1] ?? 0) + 1;
} else if (base5[i] == 5) {
base5[i] = "0";
base5[i+1] = +(base5[i+1] ?? 0) + 1;
}
}
return base5.reverse().join("");
}
Insert cell
part1 = toSnafu(d3.sum(data.map(fromSnafu)))
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