Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let experimentCount = 10000;
- console.log(`Performing ${experimentCount} experiments using two fighters until one of them reaches level 12.`);
- repeatExperiments(experimentCount, 5, 0.2);
- repeatExperiments(experimentCount, 10, 0.2);
- repeatExperiments(experimentCount, 20, 0.2);
- repeatExperiments(experimentCount, 5, 0.4);
- repeatExperiments(experimentCount, 10, 0.4);
- repeatExperiments(experimentCount, 20, 0.4);
- repeatExperiments(experimentCount, 5, 0.8);
- repeatExperiments(experimentCount, 10, 0.8);
- repeatExperiments(experimentCount, 20, 0.8);
- repeatExperiments(experimentCount, 5, 1.6);
- repeatExperiments(experimentCount, 10, 1.6);
- repeatExperiments(experimentCount, 20, 1.6);
- function repeatExperiments(experimentCount, bonusXp, xpGainFactor) {
- let sumMattered = 0;
- let sumSessions = 0;
- for(let i = 0; i < experimentCount; i++) {
- let results = performExperiment(bonusXp, xpGainFactor);
- sumMattered += results.mattered;
- sumSessions += results.sessions;
- }
- let ratio = Math.round(1000 * sumMattered / sumSessions) / 10;
- let averageSessions = Math.round(sumSessions / experimentCount);
- let averageMattered = Math.round(ratio * 0.01 * averageSessions);
- console.log(`${bonusXp}% Bonus XP was on average relevant to ${averageMattered} sessions (${ratio}%), ${averageSessions} sessions to hit level 12.`);
- }
- function performExperiment(bonusXp, xpGainFactor) {
- let bonusXpPercent = (bonusXp * 0.01) + 1;
- let fighterXp = [200,400,800,1500,3000,6500,12000,20000,30000,40000,60000];
- let fighter1 = { xp: 0, level: 1 };
- let fighter2 = { xp: 0, level: 1 };
- let sessions = 0;
- let bonusXpMattered = 0;
- for(let i = 0; i < 200; i++) {
- sessions++;
- let threshold = fighter1.xp < 20000 ? fighter1.xp : 20000;
- threshold = threshold < 200 ? 200 : threshold;
- let xpGain = threshold * xpGainFactor * Math.random();
- fighter1.xp += Math.round(xpGain);
- fighter2.xp += Math.round(xpGain * bonusXpPercent);
- fighter1.level = getFighterLevel(fighter1.xp);
- fighter2.level = getFighterLevel(fighter2.xp);
- //console.log(`Session ${sessions}. Fighter ${fighter1.level} (${fighter1.xp}), Fighter ${fighter2.level} (${fighter2.xp})`);
- if (fighter1.level != fighter2.level) {
- bonusXpMattered++;
- }
- if (fighter1.level == 12) break;
- }
- function getFighterLevel(xp) {
- let level = fighterXp.findIndex(x => x > xp);
- if (level == -1) level = 11;
- return level + 1;
- }
- return { sessions, mattered: bonusXpMattered };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement