Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const probOfSuccess = 0.24;
- const maxSkillPoints = 5;
- // Editable Fields:
- const runs = 1000000000;
- const decimalPrecision = 1;
- const simulRun = () => {
- const skillUseDict = {};
- for (let i = 0; i < runs; i++) {
- let skillPoints = maxSkillPoints;
- let autarky = false;
- while (skillPoints > 0 && !autarky) {
- skillPoints--;
- if (Math.random() < probOfSuccess) { autarky = true };
- }
- if (!autarky) { skillPoints = maxSkillPoints + 1 };
- skillUseDict[maxSkillPoints - skillPoints] = (skillUseDict[maxSkillPoints - skillPoints] || 0) + 1;
- }
- const dProbDist = Object.fromEntries(Object.entries(skillUseDict).map(val => [val[0], (val[1] / runs * 100)]));
- const cProbDist = Object.fromEntries(Object.entries(dProbDist).map((val, index, array) => {
- if (index === 0 || index === array.length - 1) {return [val[0], val[1].toFixed(decimalPrecision) + "%"]};
- let sum = 0;
- for (let i = index; i >= 0; i--) {
- sum += array[i][1];
- }
- return [val[0], sum.toFixed(decimalPrecision) + "%"];
- }));
- console.log(cProbDist);
- };
- console.time('Runtime')
- simulRun();
- console.timeEnd('Runtime')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement