Обсуждение:りゅうたま: natural fantasy R.P.G.
Версия от 12:52, 18 августа 2025; Demetrius (обсуждение | вклад) (→Таблица вероятностей: d перед типом кости (и ссылка))
Таблица вероятностей[править]
Таблица вероятностей получена таким кодом:
const размерыКостей = [4, 6, 8, 10, 12]; const целевыеЧисла = [4, 6, 8, 10, 12, 14, 16, 18, 20]; const вероятностьУспеха = (размер1, размер2, целевоеЧисло) => { let броски = 0; let успехи = 0; for (let знач1 = 1; знач1 <= размер1; знач1++) { for (let знач2 = 1; знач2 <= размер2; знач2++) { броски++; const критическийУспех = (знач1 === 6 && знач2 === 6) || (знач1 === размер1 && знач2 === размер2); if (знач1 + знач2 >= целевоеЧисло || критическийУспех) { успехи++; } } } return успехи / броски; }; const вПроцентах = (число) => (Math.floor(число * 10000) / 100).toString().replace('.', ',') + '%' const ссылкаНаТипКости = (размер) => размер === 20 ? '[[Кость d20|d20]]' : `[[d${размер}]]` const рядВероятностей = (размер1, размер2, объединённыйСПредыдущими) => '| ' + [ ...(объединённыйСПредыдущими ? [] : [ ` rowspan="${размерыКостей.length}" | ${ссылкаНаТипКости(размер1)}` ]), ссылкаНаТипКости(размер2), ...целевыеЧисла.map((целевоеЧисло) => вПроцентах(вероятностьУспеха(размер1, размер2, целевоеЧисло))) ].join(' || '); const рядыДляВторогоРазмера = (размер1) => размерыКостей.map((размер2, индекс) => рядВероятностей(размер1, размер2, индекс !== 0)).join("\n|-\n") const содержаниеТаблички = размерыКостей.map(рядыДляВторогоРазмера).join("\n|-\n") const заголовокТаблички1 = '!' + [ 'colspan="2" | Бросаемые кости', `colspan="${целевыеЧисла.length}" | Целевое число`, ].join(' !! ') const заголовокТаблички2 = '!' + [ 'Первая', 'Вторая', ...целевыеЧисла, ].join(' !! ') const табличка = [ '{| class="wikitable" style="margin:auto"', заголовокТаблички1, заголовокТаблички2, содержаниеТаблички + '\n|}', ].join("\n|-\n"); console.log(табличка)
Надеюсь, что в нём нет ошибок :D Demetrius (обсуждение) 12:41, 18 августа 2025 (MSK)