JSFiddle - React, Tailwind, and code Playground

CSS

body {
    white-space: pre-wrap;
}

JavaScript

function makeRandomRange(x) {
    var range = new Array(x),
        pointer = x;
    return function getRandom() {
        if (range) {
            pointer--;
            var random = Math.floor(Math.random() * pointer);
            var num = (random in range) ? range[random] : random;
            range[random] = (pointer in range) ? range[pointer] : pointer;
            range[pointer] = num;
            if (pointer <= 0) { // first x numbers had been unique
                range = null; // free memory;
            }
            return num;
        } else {
            return Math.floor(Math.random() * x);
        }
    };
}

var generate = makeRandomRange(20);
var obj = {};
var nums = [];
for (var i = 0; i < 100000; i++) {
    var x = generate();
    nums.push(x);
    obj[x] = (obj[x] || 0) + 1;
}
document.body.firstChild.data = 
    "distribution: "+JSON.stringify(obj, null, 4)+"\n\n" + nums.splice(0,20).join("\n")+"\n----\n"+nums.join("\n");