PseudoRandomDeterministicBinaryGenerator

Potential solution to http://codegolf.stackexchange.com/questions/6868/generate-a-completely-deterministic-pseudorandom-bit-stream

by briguy37

JavaScript

var getDeterministicPseudoRandString = function(length){
    var randString = '';

    var i = 2;
    var prevRand = '';
    
    outerLoop:
    while(randString.length < length){
        var nextRand, nextFullRand = Math.sqrt(i++).toString(2).substring(1).replace('.', '');
        nextRand = nextFullRand;
        for(var j = prevRand.length; j > 0; j--){
            var replaceString = prevRand.substring(0, j);
            
            nextRand = nextFullRand;
            
            if(nextFullRand.indexOf(replaceString) == 0){
                if(j == prevRand.length && j > 30){
                    //start i over at 2
                    console.log('max i reached: ' + i);
                    
                    i = 2;
                    continue outerLoop;
                } else {
                    nextRand = nextFullRand.replace(replaceString, '');
                }
                
                break;
            }
        }
        prevRand = nextFullRand;
        
        randString += nextRand;
    }
    
    return randString.substring(0, length);//Return the substring with the appropriate length
};

var startTime = new Date();
var pseudoRandomString = getDeterministicPseudoRandString(1000);
var endTime = new Date();

console.log(pseudoRandomString);
console.log('Time for 1000 pseudo-random chars: ' + (endTime.getTime() - startTime.getTime() + 'ms'));


startTime = new Date();
pseudoRandomString = getDeterministicPseudoRandString(100000);
endTime = new Date();
console.log('Time for 100000 pseudo-random chars: ' + (endTime.getTime() - startTime.getTime() + 'ms'));