Exclusive randoms
Damn randoms. TODO: resource from jqplot.com is failing to load.
by davidhong
HTML
<script src="http://baagoe.com/en/RandomMusings/javascript/Mash.js"></script>
<script src="http://baagoe.com/en/RandomMusings/javascript/Alea.js"></script>
<script src="http://www.jqplot.com/src/jquery.jqplot.min.js"></script>
<script src="http://www.jqplot.com/src/plugins/jqplot.canvasTextRenderer.min.js"></script>
<script src="http://www.jqplot.com/src/plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
<figure>
<div id="graph"></div>
<figcaption>Frequence of randomly generated numbers in range (0, 100]</figcaption>
</figure>
JavaScript
// A random function which excludes given set of samples
//
// @param {Number} n – upper boundary of random number being generated
// @param {Array} exclusions – an array containing a list of numbers to exclude
// @returns {Number} between (0, n]
function random(n, exclusions) {
var r = function() { return Alea(Math.random()).uint32(); },
result;
if (typeof n == 'number')
result = r() % n;
else
result = r();
// Simple exclusion test & recursion...
if ($.isArray(exclusions) && exclusions.indexOf(result) >= 0)
return random(n, exclusions);
else
return result;
};
// Test your randomness.
$(function() {
var i = 0,
length = 333,
data = [],
exclude = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
sample, value;
for (; i < length; i += 1) {
sample = random(100, exclude);
value = data[sample] || 0;
data[sample] = value + 1;
}
// Human friendly representation of the data collected.
$.jqplot('graph', [data]);
});