JSFiddle - React, Tailwind, and code Playground
JavaScript
class LongestChain {
static onEven (number) {
return number / 2;
}
static onOdd (number) {
return 3 * number + 1;
}
static iterate (number) {
number = number % 2 === 0 ? this.onEven(number) : this.onOdd(number);
// Return number of iterations
return number > 1 ? this.iterate(number) + 1 : 1;
}
static compute (topNumber) {
let maxProducer;
let maxIterations = 0;
// Higher numbers have higher possibilities of producing more iterations,
// start from the top
for (let n = topNumber; n > 0; n--) {
const currIterations = this.iterate(n);
if (currIterations > maxIterations) {
maxProducer = n;
maxIterations = currIterations;
}
}
return maxProducer;
}
}
const result = LongestChain.compute(1000000);
/* Longest chain producer for 1000000 is 837799 with 524 iterations */
console.log(result);