1d20 vs 10d2
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 _1d20_chance = 1 / 12;
const _10d2_chance = 1 / 2 ** 10;
const _1d20_array = new Array(20).fill(_1d20_chance);
const _10d2_array = new Array(20).fill(0);
for (let _1 = 1; _1 <= 2; _1++) {
for (let _2 = 1; _2 <= 2; _2++) {
for (let _3 = 1; _3 <= 2; _3++) {
for (let _4 = 1; _4 <= 2; _4++) {
for (let _5 = 1; _5 <= 2; _5++) {
for (let _6 = 1; _6 <= 2; _6++) {
for (let _7 = 1; _7 <= 2; _7++) {
for (let _8 = 1; _8 <= 2; _8++) {
for (let _9 = 1; _9 <= 2; _9++) {
for (let _10 = 1; _10 <= 2; _10++) {
_10d2_array[_1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 - 1] += _10d2_chance;
}
}
}
}
}
}
}
}
}
}
let _1d20_sum = 0;
let _10d2_sum = 0;
for (let i = 1; i <= 12; i++) {
_1d20_sum += i * _1d20_array[i - 1];
_10d2_sum += i * _10d2_array[i - 1];
if (_1d20_array[i - 1] === 0) _1d20_array[i - 1] = null;
if (_10d2_array[i - 1] === 0) _10d2_array[i - 1] = null;
}
const label = (dice, chance, sum) => `${dice} шанс: ${chance.toFixed(3)}, средний дайс: ${sum.toFixed(2)}`;
new Chart('chart', {
type: 'line',
data: {
labels: [...new Array(20)].map((_, i) => i + 1),
datasets: [{
label: label(`1d20`, _1d20_chance, _1d20_sum),
data: _1d20_array,
borderColor: 'rgb(0, 255, 0)'
},
{
label: label(`10d2`, _10d2_chance, _10d2_sum),
data: _10d2_array,
borderColor: 'rgb(255, 0, 0)',
tension: .4
},
]
},
options: {
elements: {
point: {
radius: 8
},
},
datasets: {
line: {
borderJoinStyle: `round`,
spanGaps: true
}
},
scales: {
y: {
beginAtZero: true
}
}
}
});