JSFiddle - React, Tailwind, and code Playground
by Prathameshsb
CSS
* {
background-color: #232323;
}
JavaScript
function rollDice(probabilities) {
const sortedProbabilities = Object.entries(probabilities).sort(
(a, b) => a[1] - b[1]
);
const cumulativeProbabilities = sortedProbabilities.reduce(
(acc, [dice, prob]) => {
const prevCumulative = acc.length > 0 ? acc[acc.length - 1][1] : 0;
return [...acc, [dice, prevCumulative + prob]];
},
[]
);
const randomNum = Math.random();
let left = 0;
let right = cumulativeProbabilities.length - 1;
while (left < right) {
const mid = Math.floor((left + right) / 2);
if (cumulativeProbabilities[mid][1] < randomNum) {
left = mid + 1;
} else {
right = mid;
}
}
return parseInt(cumulativeProbabilities[left][0]);
}
const diceProbabilities = {
'1': 0.1,
'2': 0.2,
'3': 0.15,
'4': 0.15,
'5': 0.2,
'6': 0.2,
};
const result = rollDice(diceProbabilities);
console.log(result);