var r1 = [11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 13]; var r2 = [13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16]; var r3 = [19, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23]; var c = 0; var t = 0; r1.forEach(v1 => { r2.forEach(v2 => { r3.forEach(v3 => { t++; if (v1 + v2 + v3 >= 44) { c++; } }); }); }); console.log(c + " / " + t + " = " + ((c / t) * 100).toLocaleString(undefined)); // // 0.176025390625 Crit chance 0.823974609375 No crit chance // 3375 / 4096 721 / 4096 // no crit one crit at least 2 crits // 18 --> 0.3564453125 (1460 / 4096) * (3375 / 4096) + (4048 / 4096) * (225 / 4096) + (496 / 4096) + (496 / 4096) --> 0.4690835475921631 // at least one crit // 19 --> 0.77490234375 (3174 / 4096) * (3375 / 4096) + 721 / 4096 --> 0.8145252466201782 // 20 --> 0.9228515625 (3780 / 4096) * (3375 / 4096) + 721 / 4096 --> 0.9364316463470459 // 21+ --> 1 (4096 / 4096) * (3375 / 4096) + 721 / 4096 --> 1 // 18 --> 0.98828125 4048 / 4096 // 19+ --> 1 4096 / 4096 c = 0; for (let i = 0; i < 16; ++i) { for (let j = 0; j < 16; ++j) { for (let k = 0; k < 16; ++k) { let critCount = (i === 0 ? 1 : 0) + (j===0 ? 1 : 0) + (k ===0 ? 1 : 0); if (critCount) { } } } } console.log(c + " / " + t + " = " + ((c / t) * 100).toLocaleString(undefined));