Fair coin
by jsumners
HTML
<script src="http://davidbau.com/encode/seedrandom-min.js"></script>
<script src="http://www.movable-type.co.uk/scripts/sha1.js"></script>
<p>Log</p>
<ol id="output">
</ol>
JavaScript
$(function() {
var $output = $('#output'),
flip = function() {},
getSeed = function() {},
log = {
heads: 0,
tails: 0,
headsTotal: 0,
tailsTotal: 0
},
runTest = function() {},
seed = '',
x = 100, // flips to perform
y, // flip result
z = 20; // number of tests to perform
getSeed = function() {
var s = {};
s.a = (new Date()).getTime();
s.b = (new Date()).getTime() + Math.floor(Math.sqrt(s.a));
s.c = (new Date()).getTime() + Math.floor(Math.sqrt(s.b));
s.a = Math.floor(+(s.a.toString().substr(-5)) / 1000);
s.b = Math.floor(+(s.b.toString().substr(-5)) / 1000);
s.c = Math.ceil(+(s.c.toString().substr(-5)) / 1000);
s.q = s.a * (s.b * s.b) + s.a * s.b + s.c;
console.dir(s);
return Sha1.hash(s.q, false);
};
flip = function() {
var c = Math.random(1);
return (c < 0.5) ? 'tails' : 'heads';
};
runTest = function() {
if (z === 0) {
$output.append([
'<li>',
'Heads Total = ', log.headsTotal,
'; Tails Total = ', log.tailsTotal,
'; H/T = ', (log.headsTotal / log.tailsTotal)
].join(''));
return;
}
seed = getSeed();
Math.seedrandom(seed);
while (x > 0) {
y = flip();
log[y] += 1;
x -= 1;
}
$output.append([
'<li>',
'Heads = ', log.heads,
'; Tails = ', log.tails,
'; Seed = ', seed,
'</li>'
].join(''));
z -= 1;
// Update totals
log.headsTotal += log.heads;
log.tailsTotal += log.tails;
// Reset for next iteration
log.heads = 0;
log.tails = 0;
x = 100;
...