deck option

by nwellcome

JavaScript

function pick(weights) {
    var totalWeight = 0;
    var rnd = Math.random();
    for (var i = 0; i < weights.length; i++) {
        totalWeight += weights[i]
        if (rnd <= totalWeight) {
            return i;
        }
    }
}

var P = [0.3, 0.1, 0.6];
var BUFFER_SIZE = 1;
var MAX = 1000000;

function main() {
    var buffer = [];
    var hist = [0, 0, 0];
    var state = null;
    for (var i = 0; i < BUFFER_SIZE; i++) {
        buffer.push(pick(P));
    }
    for (var i = 0; i < MAX; i++) {
        buffer.push(pick(P));
        if (buffer[0] == state) {
            buffer.push(buffer.shift());
        }
        state = buffer.shift();
        hist[state]++;
    }
    console.log(hist);
}

main();