1d12 vs 2d6 vs 3d4
by nazarpunk
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.min.js"></script>
<canvas id="chart"></canvas>
JavaScript
const _1d12_chance = 1 / 12;
const _2d6_chance = 1 / 6 ** 2;
const _3d4_chance = 1 / 4 ** 3;
const _1d12_array = new Array(12).fill(_1d12_chance);
const _2d6_array = new Array(12).fill(0);
const _3d4_array = new Array(12).fill(0);
// 2d6
for (let i = 1; i <= 6; i++) {
for (let k = 1; k <= 6; k++) {
_2d6_array[i + k - 1] += _2d6_chance;
}
}
// 3d4
for (let i = 1; i <= 4; i++) {
for (let k = 1; k <= 4; k++) {
for (let j = 1; j <= 4; j++) {
_3d4_array[i + k + j - 1] += _3d4_chance;
}
}
}
let _1d12_sum = 0;
let _2d6_sum = 0;
let _3d4_sum = 0;
for (let i = 1; i <= 12; i++) {
_1d12_sum += i * _1d12_array[i - 1];
_2d6_sum += i * _2d6_array[i - 1];
_3d4_sum += i * _3d4_array[i - 1];
if (_1d12_array[i - 1] === 0) _1d12_array[i - 1] = null;
if (_2d6_array[i - 1] === 0) _2d6_array[i - 1] = null;
if (_3d4_array[i - 1] === 0) _3d4_array[i - 1] = null;
}
const label = (dice, chance, sum) => `${dice} шанс: ${chance.toFixed(3)}, средний дайс: ${sum}`;
new Chart('chart', {
type : 'line',
data : {
labels : [...new Array(12)].map((_, i) => i + 1),
datasets: [
{
label : label(`1d12`, _1d12_chance, _1d12_sum),
data : _1d12_array,
borderColor: 'rgb(0, 255, 0)'
},
{
label : label(`2d6`, _2d6_chance, _2d6_sum),
data : _2d6_array,
borderColor: 'rgb(255, 0, 0)'
},
{
label : label(`3d4`, _3d4_chance, _3d4_sum),
data : _3d4_array,
borderColor: 'rgb(0, 0, 255)',
tension: .3
}
]
},
options: {
elements: {
point: {
radius: 8
},
},
datasets: {
line: {
borderJoinStyle: `round`,
spanGaps : true
}
},
scales : {
y: {
beginAtZero: true
}
}
}
});