JSFiddle - React, Tailwind, and code Playground

by nwellcome

JavaScript

// Ladder simulator
// Variables: 
//    Initial population count
//    Population growth rate
//    Player average win rate
//    Player average play rate
//    Player average growth rate
//    Player sigma win rate
//    Player sigma play rate
//    Player sigma growth rate
var INITIAL_POPULATION = 500;
var AVG_WIN_RATE = 0.5;
var STD_WIN_RATE = 0.2;
var AVG_PLAY_RATE = 1;
var STD_PLAY_RATE = 1;
var AVG_GROWTH_RATE = 1;
var STD_GROWTH_RATE = 1;

var players = [];

function randomlyPopulatePlayers(players, numberOfPlayers) {
    var z = new Ziggurat();
    for (var i = 0; i < numberOfPlayers; i++) {
        players.push((z.nextGaussian() * STD_WIN_RATE + AVG_WIN_RATE));
    }
}

function ladderSimulation(players) {
    var ranks = [];
    this.populateRanks = function () {
    
    }
    this.tick = function() {
        
    }
}

function main() {
    randomlyPopulatePlayers(players, INITIAL_POPULATION);
}
main();

function Ziggurat() {
    var jsr = 123456789;

    var wn = Array(128);
    var fn = Array(128);
    var kn = Array(128);

    function RNOR() {
        var hz = SHR3();
        var iz = hz & 127;
        return (Math.abs(hz) < kn[iz]) ? hz * wn[iz] : nfix(hz, iz);
    }

    this.nextGaussian = function() {
        return RNOR();
    }

    function nfix(hz, iz) {
        var r = 3.442619855899;
        var r1 = 1.0 / r;
        var x;
        var y;
        while (true) {
            x = hz * wn[iz];
            if (iz == 0) {
                x = (-Math.log(UNI()) * r1);
                y = -Math.log(UNI());
                while (y + y < x * x) {
                    x = (-Math.log(UNI()) * r1);
                    y = -Math.log(UNI());
                }
                return (hz > 0) ? r + x : -r - x;
            }

            if (fn[iz] + UNI() * (fn[iz - 1] - fn[iz]) < Math.exp(-0.5 * x * x)) {
                return x;
            }
            hz = SHR3();
            iz = hz & 127;

            if (Math.abs(hz) < kn[iz]) {
               ...