Кидання кубиків за нотацією
Справжній парсер нотації кубиків для настільних ігор: введіть 3d6+2, 4d6kh3 або adv і отримайте кожен кинутий кубик, залишені й відкинуті значення та підсумок.
Результат
«Кидання кубиків за нотацією» читає й кидає ту саму скорочену нотацію, що використовується за столами настільних рольових ігор і в правилах: «NdS» означає кинути N кубиків з S гранями, тож «3d6» кидає три шестигранні кубики. Додайте плоский модифікатор через +N або -N («3d6+2»), поєднайте кілька груп кубиків в одному виразі («2d8+1d6-1») або скористайтеся скороченням переваги/завади («adv» кидає два двадцятигранні кубики й залишає більший, «dis» — залишає менший). Нотація «залиш найвищі/найнижчі» («4d6kh3» кидає чотири шестигранні кубики й залишає три найвищі — стандартний спосіб кидати характеристики персонажа) також повністю підтримується.
Під капотом це справжній токенізатор і парсер, а не список розпізнаваних виразів: нотація сканується посимвольно на токени (групи кубиків, ключові слова adv/dis, звичайні числа й оператори +/-), збирається в невелике дерево виразу і лише потім обчислюється. Працює будь-яка синтаксично коректна комбінація, включно з нотацією, для якої ніхто спеціально не писав приклад. Кожен кубик кидається за допомогою криптографічного генератора випадкових чисел браузера (crypto.getRandomValues, а не Math.random) з відбраковувальним семплюванням, щоб кожна грань мала точно однаковий шанс, а результат показує кожен окремий кубик, які кубики залишено чи відкинуто для kh/kl-кидків, застосований модифікатор і фінальний підсумок.
Щоб тул лишався передбачуваним і швидким, групи кубиків обмежені 100 кубиками й 1000 гранями на групу, а кількість «залишити» для kh/kl ніколи не може перевищувати кількість кинутих кубиків. Некоректна нотація — невідомий символ, два оператори поспіль, «висячий» + наприкінці — видає конкретне зрозуміле повідомлення про помилку замість тихого збою чи аварійного завершення. Усе працює локально в браузері: жодна нотація, кидок чи результат нікуди не надсилаються.