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();