Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.09.2015, 16:47
Новичок на форуме
Отправить личное сообщение для Дуняша Посмотреть профиль Найти все сообщения от Дуняша
 
Регистрация: 28.09.2015
Сообщений: 2

Скрипт для игральных костей
Здравствуйте. Помогите, пожалуйста, написать алгоритм или найти аналогичный скрипт, который бы выполнял следующую задачу.

У нас есть несколько игральных костей. Здесь картинки для наглядности: 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 - можно предложить в качестве результата, но необязательно.
Ответить с цитированием
  #2 (permalink)  
Старый 28.09.2015, 17:41
Аватар для sanmihan
Аспирант
Отправить личное сообщение для sanmihan Посмотреть профиль Найти все сообщения от sanmihan
 
Регистрация: 28.05.2015
Сообщений: 54

человек вводит 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
конец цикла

надеюсь вы разберетесь
Ответить с цитированием
  #3 (permalink)  
Старый 28.09.2015, 18:35
Новичок на форуме
Отправить личное сообщение для Дуняша Посмотреть профиль Найти все сообщения от Дуняша
 
Регистрация: 28.09.2015
Сообщений: 2

sanmihan, премного благодарствую.
Ответить с цитированием
  #4 (permalink)  
Старый 29.09.2015, 09:15
Аватар для sanmihan
Аспирант
Отправить личное сообщение для sanmihan Посмотреть профиль Найти все сообщения от sanmihan
 
Регистрация: 28.05.2015
Сообщений: 54

Ой в алгоритме который предложил я ошибка,
a = max - maxN
а то всегда 0 будет
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите скрипт для радио сайта!!! ordinsergei Общие вопросы Javascript 4 25.02.2014 00:54
Подскажите скрипт для радио сайта!!! ordinsergei AJAX и COMET 0 17.02.2014 22:22
Где найти скрипт - Социальный Замок для html ? klimentino Общие вопросы Javascript 1 25.10.2013 06:39
скрипт для браузерки ванка Общие вопросы Javascript 11 11.10.2013 12:20
Небольшой скрипт для контакта - логин man Элементы интерфейса 2 22.08.2009 13:53