JSFiddle - React, Tailwind, and code Playground
HTML
<form name="out"><textarea name="put" cols="80" rows="3">Press the button</textarea></form>
<button onclick="startstop();">The button</button>
<script>
var iid=input=0, my=document.forms, isit={'true':0.5,'false':0.5}, ownAutocorr;
function startstop(){
if(iid){
clearInterval(iid);
if(1 - isit.true / (isit.true+isit.false)<0.05){my.out.put.value+="\nYour array is sorted! (p<0.05)";}
iid=input=0;isit={'true':0.5,'false':0.5}
}
else {
input=JSON.parse("["+prompt("Comma separated integers")+"]");
ownAutocorr=pearsonCorrelation(input,cloneShiftArray(input));
iid=setInterval(trial,50);
}
}
function trial(){
var newArr=shuffle(input.slice(0));
var newAutocorr=pearsonCorrelation(newArr,cloneShiftArray(newArr));
isit[newAutocorr<ownAutocorr]++;
my.out.put.value="Your array is sorted with probability " + (isit.true / (isit.true+isit.false)).toFixed(2);
}
function cloneShiftArray(oldArr){
var newArr=oldArr.slice(0); //clone the array
var len=oldArr.length;
//shift the array one
for(var l=0;l<len-1;l++){
//performance is important so we'll use bitwise operators
newArr[l]^=newArr[l+1];
newArr[l+1]^=newArr[l];
newArr[l]^=newArr[l+1];
}
newArr[l]+=newArr[l-1 ];
return newArr;
}
function pearsonCorrelation(p1, p2) { //Borrowed from teh interwebs
var len = p1.length;
var sum1=sum2=sum1Sq=sum2Sq=pSum = 0;
for (var l = 0; l < len; l++) sum1 += p1[l];
for (var l = 0; l < len; l++) sum2 += p2[l];
for (var l = 0; l < len; l++) sum1Sq += Math.pow(p1[l], 2);
for (var l = 0; l < len; l++) sum2Sq += Math.pow(p2[l], 2);
for (var l = 0; l < len; l++) pSum += p1[l] * p2[l];
var num = pSum - (sum1 * sum2 / len);
var den = Math.sqrt((sum1Sq - Math.pow(sum1, 2) / len) *
(sum2Sq - Math.pow(sum2, 2) / len));
if (den == 0) return 0;
return num / den;
}
function shuffle(array) {//also borrowed
var currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random()...