JSFiddle - React, Tailwind, and code Playground

by jsumners

HTML

<div id="output" style="white-space: pre;">
</div>

JavaScript

var $output = $('#output');

var entrants = {
    "sanctum": [5, 12, 1, 2, 3, 10],
    "semaj": [1, 1, 3, 10],
    "astra": [1, 20, 15, 10]
};

var Bucket = function() {
    if (!(this instanceof Bucket)) {
        return new Bucket();
    }
    
    this.entries = [];
    this.prizes = [];
};

Bucket.prototype.addEntry = function(name) {
    this.entries.push(name);
};

Bucket.prototype.shuffle = function() {
    // https://github.com/coolaj86/knuth-shuffle
    var currIndex = this.entries.length,
        tempValue, randomIndex;
    
    while (0 !== currIndex) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        currIndex = currIndex - 1;
        
        tempValue = this.entries[currIndex];
        this.entries[currIndex] = this.entries[randomIndex];
        this.entries[randomIndex] = tempValue;
    }
};

var buckets = (function() {
    var obj = {};
    for (var i = 1; i <= 20; i += 1) {
        obj["bucket_" + i] = new Bucket();
    }
    return obj;
}());

for (var entrant in entrants) {
    if (!entrants.hasOwnProperty(entrant)) {
        continue;
    }
    var ar = entrants[entrant];
    
    for (var i = 0, j = ar.length; i < j; i += 1) {
        buckets["bucket_" + ar[i]].addEntry(entrant);
    }
}

for (var bucket in buckets) {
    if (!buckets.hasOwnProperty(bucket)) {
        continue;
    }
    buckets[bucket].shuffle();
}

$output.append(JSON.stringify(buckets, null, "\t"));