Скрипт для игральных костей
Здравствуйте. Помогите, пожалуйста, написать алгоритм или найти аналогичный скрипт, который бы выполнял следующую задачу.
У нас есть несколько игральных костей. Здесь картинки для наглядности: https://www.wizards.com/dnd/dice/dice.htm 4-гранная 6-гранная 8-гранная 10-гранная 12-гранная 20-гранная Чтобы игрок, например, бросил две шестигранные кости и добавил к результату 3, это записывается следующим образом: 2D6+3. В итоге полученное значение будет в диапазоне 5-15. Так вот нужен скрипт, выполняющий обратную процедуру. Т.е. игрок вводит минимальное значение диапазона (5) и максимальное значение диапазона (15), а получить он должен 2D6+3 или все комбинации с разными костями, которые могли бы дать этот же диапазон. Дополнительная информация: * Из арифметических операций в таких формулах встречаются только сложение (D8+1) и вычитания (D20-4). Умножение, деление и прочие более сложные арифметические операции там не встречаются. * Максимальное значение диапазона никогда не отрицательное (не знаю, важно это или нет). * Достаточно, чтобы в результате фигурировала лишь одна кость. Т.е. 1D8 + 2D6 + 3 - можно предложить в качестве результата, но необязательно. |
человек вводит min и max
узнаем def = max - min перебираем кубики начало цикла для N гранного кубика minN = 1 maxN = N defN = maxN - minN если defN меньше def то defN = defN + maxN - minN повторять до тех пор пока defN не станет больше или равное def если defN больше def переходим к другому кубику если defN равно def то a = def - defN b = defN / (maxN - minN) выводим пользователю b * D N + a конец цикла надеюсь вы разберетесь :) |
sanmihan, премного благодарствую.
|
Ой в алгоритме который предложил я ошибка,
a = max - maxN а то всегда 0 будет |
Часовой пояс GMT +3, время: 02:16. |