JSFiddle - React, Tailwind, and code Playground
HTML
<div id="results">
</div>
TypeScript
module Data {
export var Rates = {
1: {
'Chance': 1,
'Failstack': 0,
'MaxFailstack': 0
},
2: {
'Chance': 1,
'Failstack': 0,
'MaxFailstack': 0
},
3: {
'Chance': 1,
'Failstack': 0,
'MaxFailstack': 0
},
4: {
'Chance': 1,
'Failstack': 0,
'MaxFailstack': 0
},
5: {
'Chance': 1,
'Failstack': 0,
'MaxFailstack': 0
},
6: {
'Chance': 1,
'Failstack': 0,
'MaxFailstack': 0
},
7: {
'Chance': 1,
'Failstack': 0,
'MaxFailstack': 0
},
8: {
'Chance': 0.2,
'Failstack': 0.025,
'MaxFailstack': 13
},
9: {
'Chance': 0.175,
'Failstack': 0.02,
'MaxFailstack': 14
},
10: {
'Chance': 0.15,
'Failstack': 0.015,
'MaxFailstack': 15
},
11: {
'Chance': 0.125,
'Failstack': 0.0125,
'MaxFailstack': 16
},
12: {
'Chance': 0.1,
'Failstack': 0.0075,
'MaxFailstack': 18
},
13: {
'Chance': 0.075,
'Failstack': 0.0063,
'MaxFailstack': 20
},
14: {
'Chance': 0.05,
'Failstack': 0.005,
'MaxFailstack': 25
},
15: {
'Chance': 0.025,
'Failstack': 0.005,
'MaxFailstack': 25
}
};
}
module Calculator {
export class Weapon {
SampleSize: number = 1000000;
constructor() {}
public AttemptLevel(level: number): number {
var attempts = 0;
var success = false;
var rates = Data.Rates[level];
while(!success) {
var chance = rates.Chance + (Math.min(rates.MaxFailstack, attempts) * rates.Failstack);
var roll = Calculator.Random(0, 10000);
if(chance * 10000 >= roll) {
success = true;
}
attempts++;
}
return attempts;
}
public AverageAttemptsFor(goallevel: number): number {
var totalattempts = 0;
for(var i=0; i<this.SampleSize; i++) {
for(var n=1; n<=goallevel; n++) {
totalattempts += this.AttemptLevel(n);
}
}
return totalattempts/this.SampleSize;
}
}
export function Random(min: number, max: number): number {
return Math.floor(Math.random() * (max -...