12d3 vs 6d6

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 max = 12 * 3;
const _12d3_chance = 1 / (3 ** 12);
const _6d6_chance = 1 / (6 ** 6);

const _12d3_array = new Array(max).fill(0);
const _6d6_array = new Array(max).fill(0);

for (let _1 = 1; _1 <= 3; _1++) {
  for (let _2 = 1; _2 <= 3; _2++) {
    for (let _3 = 1; _3 <= 3; _3++) {
      for (let _4 = 1; _4 <= 3; _4++) {
        for (let _5 = 1; _5 <= 3; _5++) {
          for (let _6 = 1; _6 <= 3; _6++) {
            for (let _7 = 1; _7 <= 3; _7++) {
              for (let _8 = 1; _8 <= 3; _8++) {
                for (let _9 = 1; _9 <= 3; _9++) {
                  for (let _10 = 1; _10 <= 3; _10++) {
                    for (let _11 = 1; _11 <= 3; _11++) {
                      for (let _12 = 1; _12 <= 3; _12++) {
                        _12d3_array[_1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 - 1] += _12d3_chance;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}


for (let _1 = 1; _1 <= 6; _1++) {
  for (let _2 = 1; _2 <= 6; _2++) {
    for (let _3 = 1; _3 <= 6; _3++) {
      for (let _4 = 1; _4 <= 6; _4++) {
        for (let _5 = 1; _5 <= 6; _5++) {
          for (let _6 = 1; _6 <= 6; _6++) {
            _6d6_array[_1 + _2 + _3 + _4 + _5 + _6 - 1] += _6d6_chance;
          }
        }
      }
    }
  }
}

let _12d3_sum = 0;
let _6d6_sum = 0;

for (let i = 1; i <= max; i++) {
  _12d3_sum += i * _12d3_array[i - 1];
  _6d6_sum += i * _6d6_array[i - 1];
  if (_12d3_array[i - 1] === 0) _12d3_array[i - 1] = null;
  if (_6d6_array[i - 1] === 0) _6d6_array[i - 1] = null;
}

const label = (dice, chance, sum) => `${dice} шанс: ${chance.toFixed(6)}, средний дайс: ${sum.toFixed(2)}`;


new Chart('chart', {
  type: 'line',
  data: {
    labels: [...new Array(max)].map((_, i) => i + 1),
    datasets: [{
        label: label(`12d3`, _12d3_chance, _12d3_sum),
        data: _12d3_array,
        borderColor: 'rgb(0, 255, 0)',
        tension: .2

     ...