function randomNum(min, max) {
return parseInt(Math.random() * (max - min + 1) + min, 10);
}
function totalNumbers(numArr = [], initNum = 0) {
return numArr.reduce((prev, curItem) => prev + curItem, initNum);
}
function randomDice(diceNum = 3, totalNum = 3) {
if (totalNum < diceNum || totalNum > diceNum * 6) return [];
let dices = [], dicesCount = 0;
for (let index = 1; index <= diceNum; index++) {
if (totalNum === diceNum) {
dicesCount = 1;
}
if (totalNum === diceNum * 6) {
dicesCount = 6;
}
if (totalNum > diceNum && totalNum < diceNum * 6) {
dicesCount = index < diceNum
? randomNum(1, Math.min(totalNum - (diceNum - index) - totalNumbers(dices), 6))
: totalNum - totalNumbers(dices);
}
dices.push(dicesCount);
}
const totalCount = totalNumbers(dices);
const hasOverSix = dices.some((item) => item > 6);
if (totalCount !== totalNum || hasOverSix) {
try {
return randomDice(diceNum, totalNum);
} catch (error) {
console.log(error);
return [];
}
}
return dices;
}
let diceNum = 10;
let totalNum = randomNum(diceNum, diceNum * 6);
const dices = randomDice(diceNum, totalNum);
console.log({diceNum, totalNum, dices});