Skip to content

Instantly share code, notes, and snippets.

@xdenser
Last active December 29, 2015 20:09
Show Gist options
  • Save xdenser/7722083 to your computer and use it in GitHub Desktop.
Save xdenser/7722083 to your computer and use it in GitHub Desktop.
Javascript implemetations for comment https://news.ycombinator.com/item?id=6823433
function naive(){
var
max_a0 = process.argv[2],
longest = 0,
max_len = 0, a0,len,a;
for(a0=1;a0<=max_a0;a0++){
a = a0;
len = 0;
while( a != 1){
len++;
a = ((a%2==0)? a : 3*a+1)/2;
}
if(len>max_len){
max_len = len;
longest = a0;
}
}
console.log(max_len,longest);
}
function intArithm(){
var
max_a0 = +process.argv[2],
longest = 0,
max_len = 0, a0,len, a,z;
for(a0=1;a0<=max_a0;++a0){
a = a0;
len = 0;
while( a != 1){
len++;
z = a >>> 1;
a = (!(a&1))?z:(a+z+1);
}
if(len>max_len){
max_len = len;
longest = a0;
}
}
console.log(max_len,longest);
}
function intArithmMemo(){
var
max_a0 = +process.argv[2],
longest = 0,
max_len = 0, a0,len, a, z, mem = {};
for(a0=1;a0<=max_a0;++a0){
a = a0;
len = 0;
while( a != 1){
if(mem[a]){
len+=mem[a];
break;
}
len++;
z = a >>> 1;
a = (!(a&1))?z:(a+z+1);
}
mem[a0] = len;
if(len>max_len){
max_len = len;
longest = a0;
}
}
console.log(max_len,longest);
}
var st = Date.now();
naive();
console.log('naive',((Date.now()-st)/1000).toFixed(2),'sec');
var st = Date.now();
intArithm();
console.log('intArithm',((Date.now()-st)/1000).toFixed(2),'sec');
var st = Date.now();
intArithmMemo();
console.log('intArithm memoized',((Date.now()-st)/1000).toFixed(2),'sec');
function next_collatz(a){
return ((a%2==0)? a : 3*a+1)/2;
}
function len4a(a){
var len =0;
while(a!=1){
len++;
a = next_collatz(a);
}
return len;
}
var mem = {};
function mlen4a(a0){
var len = 0, a = a0;
while(a!=1){
if(mem[a]){
len+=mem[a];
break;
}
len++;
a = next_collatz(a);
}
mem[a0] = len;
return len;
}
function decompozed(lf){
var
max_a0 = process.argv[2],
longest = 0,
max_len = 0, a0,len,a;
for(a0=1;a0<=max_a0;a0++){
len = lf(a0)
if(len>max_len){
max_len = len;
longest = a0;
}
}
console.log(max_len,longest);
}
var st = Date.now();
decompozed(len4a);
console.log('decompozed',((Date.now()-st)/1000).toFixed(2),'sec');
var st = Date.now();
decompozed(mlen4a);
console.log('memoized decompozed',((Date.now()-st)/1000).toFixed(2),'sec');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment