JSFiddle - React, Tailwind, and code Playground

Random 10K Pool

by skibulk

HTML

<div id="status"></div>

JavaScript

console.clear();

var pool = 1000;
var counts = [];
for(var i = 0; i < pool; i++){
	counts.push(1);
}
//console.log(counts);

var lowestID = 0;
var runs = Math.floor(10000/33);
var status = document.getElementById("status");

function run(){
  for(var i = 0; i < 30; i++){
		var key = Math.floor(Math.random() * pool);
    replace(key);
  }
  
  // Give rewards from the bottom
  replace(0);
  replace(0);
  replace(0);
  
  if(runs-- > 0){
  	status.innerHTML = runs + " runs left";
		setTimeout(run, 10);
  } else {
  	var maxID = counts.reduce((a, b) => a + b, 0);
    var flat = counts.join(",");
  	console.log(lowestID, maxID, flat.length, flat);
  }
}

function replace(key){
  var val = counts.splice(key, 1)[0];

  if(key > 0){
    counts[key - 1] += val;
  } else {
    lowestID += val;
  }

  counts.push(1);
}

setTimeout(run, 10);

/*
    var compact = [];
    var prev = counts[0];
    var prevCount = 1;
    
    for(var j = 1; j < pool + 1; j++){
    	if(counts[j] == prev){
      	prevCount++;
      } else if(prevCount > 1){
          compact.push(prev + "x" + prevCount);
          prev = counts[j];
          prevCount = 1;
      } else {
          compact.push(prev);
          prev = counts[j];
          prevCount = 1;
      }
    }
    
    console.log(compact.join(","));
*/