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;
        
       ...