JSFiddle - React, Tailwind, and code Playground
by dvjc
HTML
<div>Collatz!</div>
<div>Which starting number, under one million, produces the longest chain?</div>
<div>Usage: <a href="http://projecteuler.net/problem=14" id="problemLink" target="_blank">Project Euler (14)</a></div>
<div id="divResult"></div>
<hr/>
<div id="divValue"></div>
JavaScript
document.getElementById('divValue').innerText = longestPathSeed(1000000);
// even: return half
// odd: triple and add one
function collatz(n){
return ( (n%2) === 0 ) ? (n/2) : (3*n+1) ;
}
// n=1? no need to do anything
// otherwise find collatz for n
// and recursively update m until n is 1
function pathLength(n, m){
var p = 1;
if( n == 1 ){
p = m;
} else {
var n2 = collatz(n);
p = pathLength(n2, m+1);
}
return p;
}
function longestPathSeed(n){
var longest = -1;
var seed = -1;
for( var i = 1; i <=n; i++ ){
var p = pathLength( i, 1 );
if( longest < p ){
longest = p;
seed = i;
}
}
return seed;
}