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;
}
}
console.log(rnd + " " + totalWeight + " was a problem");
}
function print(hist, max) {
var str = "";
for (var i = 0; i < hist.length; i++) {
str += (hist[i] / max) + "\t";
}
console.log(str);
}
// 2% lower chance of 2 consecutive, 4% lower chance of 3, 6% lower chance of 3+
var tableA = [
// h1, h2, h3+, c1, c2, c3+, m1, m2, m3+
[0.00, 0.28, 0.00, 0.11, 0.00, 0.00, 0.61, 0.00, 0.00], // h1
[0.00, 0.00, 0.26, 0.12, 0.00, 0.00, 0.62, 0.00, 0.00], // h2
[0.00, 0.00, 0.24, 0.13, 0.00, 0.00, 0.63, 0.00, 0.00], // h3
[0.31, 0.00, 0.00, 0.00, 0.08, 0.00, 0.61, 0.00, 0.00], // c1
[0.32, 0.00, 0.00, 0.00, 0.00, 0.06, 0.62, 0.00, 0.00], // c2
[0.33, 0.00, 0.00, 0.00, 0.00, 0.04, 0.63, 0.00, 0.00], // c3
[0.31, 0.00, 0.00, 0.11, 0.00, 0.00, 0.00, 0.58, 0.00], // m1
[0.32, 0.00, 0.00, 0.12, 0.00, 0.00, 0.00, 0.00, 0.56], // m2
[0.33, 0.00, 0.00, 0.13, 0.00, 0.00, 0.00, 0.00, 0.54] // m3
];
// Constant chance of each
var tableB = [
// h1, h2, h3+, c1, c2, c3+, m1, m2, m3+
[0.00, 0.30, 0.00, 0.10, 0.00, 0.00, 0.60, 0.00, 0.00], // h1
[0.00, 0.00, 0.30, 0.10, 0.00, 0.00, 0.60, 0.00, 0.00], // h2
[0.00, 0.00, 0.30, 0.10, 0.00, 0.00, 0.60, 0.00, 0.00], // h3
[0.30, 0.00, 0.00, 0.00, 0.10, 0.00, 0.60, 0.00, 0.00], // c1
[0.30, 0.00, 0.00, 0.00, 0.00, 0.10, 0.60, 0.00, 0.00], // c2
[0.30, 0.00, 0.00, 0.00, 0.00, 0.10, 0.60, 0.00, 0.00], // c3
[0.30, 0.00, 0.00, 0.10, 0.00, 0.00, 0.00, 0.60, 0.00], // m1
[0.30, 0.00, 0.00, 0.10, 0.00, 0.00, 0.00, 0.00, 0.60], // m2
[0.30, 0.00, 0.00, 0.10, 0.00, 0.00, 0.00, 0.00, 0.60] // m3
];
function printHist(table) {
var max = 10000000;
var histMap = [0, 0, 0, 1, 1, 1, 2, 2, 2];
var...