Published
Edited
Apr 28, 2022
1 star
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// Imperative solution

resultsImperative = {
const initialNumber = startingNumber;
let maxIterations = maxIterationsConfig;
let intermediateNumber = initialNumber;
let results = [];

while (intermediateNumber !== 1 && maxIterations > 0) {
results.push(intermediateNumber);
if (intermediateNumber % 2) {
intermediateNumber = intermediateNumber * 3 + 1;
} else {
intermediateNumber = intermediateNumber / 2;
}
maxIterations--;
}
results.push(1);
return {
results,
conjectureIsValid: maxIterations !== 0
};
}
Insert cell
Insert cell
Insert cell
// Functional solution

resultsFunctional = {
const collatzSolver = (num, maxIterations = 10000, results = [num]) => {
if (num === 1 || maxIterations <= 0) {
return {
results,
conjectureIsValid: maxIterations !== 0
};
} else {
const newResult = num % 2 ? num * 3 + 1 : num / 2;
return collatzSolver(newResult, maxIterations - 1, [
...results,
newResult
]);
}
};

return collatzSolver(startingNumber, maxIterationsConfig);
}
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