Skip to content

Instantly share code, notes, and snippets.

@Ni55aN
Created August 7, 2017 16:43
Show Gist options
  • Save Ni55aN/c5f2d5355801e2f25e92fe003f3f42b2 to your computer and use it in GitHub Desktop.
Save Ni55aN/c5f2d5355801e2f25e92fe003f3f42b2 to your computer and use it in GitHub Desktop.
var l = [1, 22, 123, 121, 11, 23, 1223, 11,43 ,12, 123, 142, 11, 2333, 121, 123];
document.body.innerHTML+='Input: '+l+'<br>';
document.body.innerHTML+='Output: '+tietjenMooreTest(l, 2);
function _avg(x){
return x.reduce((a,b) => a+b,0)/x.length;
}
function _avgK(x, k){
var N = x.length;
var Nk = N-k;
return x.slice(0, Nk).reduce((a,b) => a+b,0)/Nk;
}
function tietjenMooreTest(X, K){
var Xs = X.slice(0,X.length).sort((a,b)=>a-b);
var avg = _avg(Xs);
var avgK = _avgK(Xs,K);
var N = X.length;
var dist = tietjenMooreDistribution(N,K);
var Nk = N-K;
var passed = Xs.filter(x => {
return Math.pow(x-avgK,2)/Math.pow(x-avg,2) < dist;
});
return X.filter(x => passed.indexOf(x) !== -1);
}
function tietjenMooreDistribution(N,K){
var A,B;
switch(K){
case 1: A=0.19418112; B=-0.06575383; break;
case 2: A=0.25812829; B=0.28278038; break;
case 3: A=0.29275863; B=0.49380456; break;
case 4: A=0.31458311; B=0.63943566; break;
case 5: A=0.3245631; B=0.73176359; break;
case 6: A=0.33029662; B=0.79975254; break;
case 7: A=0.32887508; B=0.83561828; break;
case 8: A=0.32971362; B=0.87499117; break;
case 9: A=0.32553272; B=0.89145385; break;
default: A=0.31999176; B=0.89985535;
}
return A * Math.log(N) - B
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment