Здравствуйте. Помогите, пожалуйста, написать алгоритм или найти аналогичный скрипт, который бы выполнял следующую задачу.
У нас есть несколько игральных костей. Здесь картинки для наглядности:
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 - можно предложить в качестве результата, но необязательно.