JSFiddle - React, Tailwind, and code Playground

by XarX

HTML

<pre id=painted></pre>

JavaScript

var _painted = 0, $painted = document.getElementById('painted');
var attr = [8,8,8],
nextAttr = 9,
apMin = 0,
apMax = 10,
runs = 100000,
safetyKill = 1000;


$painted.textContent+= " A1,A2,A3 : ";
for (ap=apMin;ap<=apMax;ap++) $painted.textContent+= zero(ap) + "  ";
$painted.textContent+=" (AP)\n";

while (attr[0] < 16) {
	safetyKill--;
    if (safetyKill < 0) {
    attr = [99,99,99];    
    break;
  }
  var success = new Array();
  for (a=apMin;a<=apMax;a++) success[a] = 0;
  for (ap=apMin;ap<=apMax;ap++) {
    for (i=0;i<runs;i++) {
      var critical = [0,0],
      pointsLeft = ap;

      roll0 = Math.floor(Math.random()*20)+1;
      roll1 = Math.floor(Math.random()*20)+1;
      roll2 = Math.floor(Math.random()*20)+1;

      if (roll0 == 1) critical[0]++;
      else if (roll0 == 20) critical[1]++;
      if (roll1 == 1) critical[0]++;
      else if (roll1 == 20) critical[1]++;
      if (roll2 == 1) critical[0]++;
      else if (roll2 == 20) critical[1]++;

      if (roll0 <= attr[0]) {}
      else pointsLeft-=roll0-attr[0];
      if (roll1 <= attr[1]) {}
      else pointsLeft-=roll1-attr[1];
      if (roll2 <= attr[2]) {}
      else pointsLeft-=roll2-attr[2];

      if ((pointsLeft >= 0 || critical[0] >= 2) && critical[1] < 2) success[ap]+=1/runs;
    }
  }
  ((areEqual(attr[0],attr[1],attr[2]))?$painted.textContent+="------------"+apLine():"");
  
  $painted.textContent+= ((areEqual(attr[0],attr[1],attr[2]))?">":" ") + zero(attr[0]) + "," + zero(attr[1]) + "," + zero(attr[2]) + " : ";
  for (ap=apMin;ap<=apMax;ap++) $painted.textContent+= cutToPerc(success[ap]) + " ";
  $painted.textContent+="\n";
  
  if (attr[2] == nextAttr) nextAttr++;
  for (j=0;j<3;j++)
      if (attr[j] < nextAttr) { 
        attr[j]++;
      break;
    }
    
}
  
$painted.textContent+="\nDone!";

function zero(x) {
	if (x>=0 && x < 10) return "0" + x;
  else return x;
}

function apLine() {
	var output = "";
  for (ap=apMin;ap<=apMax;ap++) output+="----";
  return output +...