JSFiddle - React, Tailwind, and code Playground

Generate random decklists, sort and calculate distance between card ids

by skibulk

JavaScript

console.clear();

var i, j, k;
var collectionSize = 10000;
var deckCount = 5;
var deckSize = 30;
var decks = [];
var decks2 = [];
var decks3 = [];
var decks4 = [];
var decks5 = [];

for (i = 0; i < deckCount; i++) {
  var deck = [];

  for (j = deckSize; j > 0; j--) {
    var card = Math.floor(Math.random() * collectionSize);
  
  	// Simulate clustering
  	if(j < deckSize*0.1){
	    var card = Math.floor(Math.random() * collectionSize/10);
    } else {
	    var card = Math.floor((Math.random() * collectionSize/10) + (collectionSize*1/10));
    }
    
    if (deck.includes(card)) {
      j++;
    } else {
      deck.push(card);
    }
  }

  deck.sort(function(a, b) {
    return a - b;
  });

  var deck2 = [];
  deck2.push(deck[0]);

  for (j = 1; j < deckSize; j++) {
    deck2.push(deck[j] - deck[j - 1]);
  }

  var deck3 = [];
  for (j = 0; j < deckSize; j++) {
    deck3.push( base95( deck[j] ) );
  }
  
  decks.push(deck);
  decks2.push(deck2);
  decks3.push(deck3.join(" "));
	decks4.push(Uint16Array.from(deck2));
}

// sort and find value at the 2/3 position
//var quantile = decks2[0].slice().sort(function(a,b){return a-b})[19];
//var bits = quantile.toString(2).length + 1;

//var bits = Math.floor(average(decks2[0])).toString(2).length + 1;
//console.log(bits);
console.log(decks2[0].join());
decks5 = listTenToTwo(decks2[0], bestChunkSize(decks2[0]) + 1);
decks6 = binaryPackIntegers(decks2[0]);
decks = decks.join(',');
decks2 = decks2.join(',');
decks3 = decks3.join(' ');

console.log(decks.length, decks);
console.log(decks2.length, decks2);
console.log(decks3.length, decks3);
console.log(decks4);
console.log(decks5.length/8, decks5);
console.log(decks6.length/8, decks6);

//function average(arr) {
//  return arr.reduce((a, b) => a + b, 0) / arr.length;
//}

// http://www.kinematicsoup.com/news/2016/9/6/data-compression-bit-packing-101
// Assuming a 1-byte header
function bestChunkSize(arr){
  var bitCounts = [];
  var nextSize = Infinity;
  var maxSize = 0;
 ...