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,
abilityPoints = 0,
success = 0,
runs = 100;
while (attr[0] < 15 || attr[1] < 15 || attr[2] < 15) {
for (i=0;i<runs;i++) {
var critical = [0,0],
pointsLeft = abilityPoints;
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+=1/runs;
}
for (j=0;j<3;j++)
if (attr[j] < nextAttr) {
attr[j]++;
break;
}
$painted.textContent+= attr[0] + "," + attr[1] + "," + attr[2] + " : " + cut(success) + "\n";
}
$painted.textContent+="\nDone!";
function cut(x) {
var output = Math.floor(1000*x);
if (output%1000 == 0) return output/1000 + ".000";
else if (output%100 == 0) return output/1000 + "00";
else if (output%10 == 0) return output/1000 + "0";
else return output/1000;
}
function cutToPerc(x) {
var output = Math.floor(100*x);
if (output<10) return "0" + output + "%";
else return output + "%";
}