я все таки напишу вдруг пригодится.
Итак трабл. у нас есть шестигранники и есть рендомайз в множезтво М из n объектов/событий. Чаще всего ситуация возникает при векторстрайке в платун, поэтому все примеры будут разыгрывать эту ситуацию.
Задача как с помощью шестигранного кубика правильно организовать рандомизацию так, чтобы все события из множества были равновероятными.
Шестигранник (задача 0)
Сам по себе позволяет нам нам конструировать нам равновероятную рандомизацию 2(вер события 1/2), 3 (1/3) и 6 (1/6) событий.
то есть если n равно этим числам , то мы просто на соответствующие грани назначаем события и рендомизируем.
Но такое бывает редко, поэтому надо придумать алгоритм в иных случаях n, с учетом того, что инструмент изменить мы как бы не можем.
Для этого используются 2 основных метода разберем их по порядку.
задача 1)Емнип правильно называется расширение вероятности до условной, но я назову "вложенность" бросков.
итак разберем ситуацию когда n>6 и n разбивается на простые множители 2 и 3, т.е есть n=(2^q)*(3^p) где p и q неотрицательные целые числа (0 + натуральные)
Примеры 8 9 12 32 48 ...
для этого случая мы увеличиваем количество бросков, т.е подбираем такую последовательность d3 d2 и d6 , что бы вероятность стала 1/n
возьмем большой пример из 48 событий. пускай это будет количество моделей в отряде.
а) 48=(2^4)*3= 6*(2^3). т.е один бросок d6 и 3 броска d2
б) берем наши 48 моделей длим визуально на 6 групп по 8 моделей, назначаем группам номера, кидаем д6- выпавший номер определяет группу, куда хитануло.
далее в группе из 8 определяем группу из 4 , c помощью D2
из четырех определяем пару моделей,
а из пары у же задетую модель (оговорюсь про 4 модели ниже, можно сократить до одного броска, но потом оговорюсь почему лучше не стоит).
внимательные могут заметить, что по такому принципу организован d66 и т.п.
Задача 2 метод расширение множества
для n = 4,5, 7 и любое число неразложимое в виде n=(2^q)*(3^p)
Суть метода заключается в том что мы расширяем множество наших событий до 6 , либо до n=(2^q)*(3^p) из предыдущей задачи.
Просто на эти события мы назначаем так называемые глобальные перебросы. Если оно выпадет- кидаем заново, начиная с самого начала.
возьмем пример с 4 и5 моделями, просто добавляем к ним 2(1) переброс, если выпадет 5+ (6+).
Пример с n=7 можно расширить до 8 ( 3 d2) , 9 (3d3) или 12 ( d2d6). возьмем последний для примера, так как меньше бросков.
к 7 моделям добавляем 5 событий перебросов. делим группу из этих 12 событий по 6 (тут возможны варианты,но я советую все перебросы оставлять в одной конечной группе),т.е делим 7 моделей на группу из 6 моделей и грппу из 1 модели и 5 перебросов.
кидаем d2 выпала первая группа , броском d6 определяем модель, если же выпала 2-я группа , за тем кидаем d6 на 1 хит пришелся в нашу модель, на 2+ мы реролим, но не последний d6 а весь бросок d2d6.
Подобно решается задача и для любого числа неразложимого в виде n=(2^q)*(3^p). вы просто в группу добавляете число реролов до такого n и сводите задачу к задаче 1
замечание 1
Из-за того что этот переброс глобальный , я бы советовал 4 распределять как d2d2, потому что если делать это через d6 возможен глобальный переброс, который опять вас заставит перебрасывать всю структуру рендома, это может " затянуться"
замечание 2
Если в результате рендомизации хит пришелся в группу,состоящую только из идентичных моделей, то на этом шаге рендомизацию можно остановить( если не важна позиция модели). Как следствие группы можно выделять по типам моделей , хотя проще и быстрее визуально.
замечание 3 можно не делить группы визуально а накидать "номер" модели.( единственное определитесь по какому принципу считать, имхо если номер выпал например 22, то это 22 ближайший от источника). как это делается? объясню на примере вышеупямянутом 48 событий.
первым броском d6 орделяем группу из 8-к допустим выпало 5 значит это номера с 33 по 40 дальше d2 (выпало 1) с 33 по36 , - d2(1) - с 33 или 34 , d2 (2) - 34 -й.
в общем как то так, если у вас проблемы с конкретным числом, напишите я распишу алгоритм рендома, а вообще для таких случаев конечно лучше найти d20 или d100