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 +...