Класичний приклад ознайомлення людей з поняттям дискретного розподілу ймовірностей - машина бобових . Ця машина має велику кількість мармуру, що падає з вузького проходу вгорі, після чого вони потрапляють рядами переплетених штифтів, де на кожен штифт мармур потрапляє, він може впасти ліворуч або праворуч від штифта. Нарешті, шпильки збирають у вертикальні бункери в нижній частині машини. Проста схема цієї машини виглядає приблизно так:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
|_|_|_|_|_|_|
На цій діаграмі O
означає місце, з якого падає мармур. Кожен ^
- це шпилька, на якій мармур має 50% шансу переміститися на квадрат або зліва, або справа від шпильки. Потім мармур збирається в бункерах в нижній частині пристрою, і для достатньо великої кількості мармуру висота штампів мармуру в бункерах буде нагадувати дискретний біноміальний розподіл.
Виклик
Для цього завдання ви будете обчислювати отриманий розподіл ймовірності машин для бобів на основі діаграм, подібних до вище. Діаграми трактуються як двовимірна «програма», через яку проходить мармур, або до полів збоку, або до полів нижче поточного поля. Коли мармур досягає дна машини, вони враховуються для розподілу ймовірностей. Щоб це було цікаво, ці діаграми будуть містити ще кілька полів, ніж просто просте джерело та шпильки. Приклад діаграми:
| O |
| ^ |
| ^ / |
| ^ | ^ |
| <^- = v |
| ^ ^ ^ ^ ^ |
Крім того, кожен з мармурів має напрямок обертання. Цей напрямок задається деякими полями і визначає, до якого наступного поля мармур рухається в кількох інших полях.
Визначаються наступні поля:
O
: Джерело. Породжує мармур прямо під ним. Напрямок цих мармурів - 50% зліва, 50% праворуч. Кожне джерело виробляє однакову кількість мармуру.U
: Мийка. Будь-який мармур, який потрапляє в це поле, видаляється з бобової машини.: Порожній простір. Якщо мармур прибуде до цього поля, він переміститься в поле нижче.
-
: Поверх. Якщо мармур прибуде до цього поля, він переміститься або в поле зліва, або в поле праворуч, залежно від поточного напрямку.^
: Спліттер. Якщо мармур потрапляє на це поле, він має 50% переміщення в поле праворуч або поле ліворуч від спліттера. Це також визначає напрямок мармуру.v
: Приєднуйтесь. Якщо мармур прибуде до цього поля, він переміститься в поле нижче./
: Нахилена накладка. Якщо мармур потрапить до цього поля, він переміститься до поля зліва від колодки, встановивши напрямок мармуру.\
: Те саме, що і попереднє, але праворуч.|
: Рефлектор. Якщо мармур потрапить до цього поля, він змінить напрямок мармуру і перемістить мармур в поле вправо або вліво, виходячи з цього зворотного напрямку.=
: Гармата. Якщо мармур потрапить до цього поля, він перемістить його вправо або вліво в поточному напрямку, поки мармур не зустріне поле, якого немає,
-
абоO
.<
: Те саме, що і попереднє, але завжди встановлюватиме напрямок і рухатиметься вліво.>
: Те саме, що і попереднє, але праворуч.
Наведені нижче гарантії щодо діаграми.
- Кожен рядок введення матиме абсолютно однакову довжину в полях.
- Найменше ліве і праворучне поле кожного ряду завжди буде а
|
. - Діаграма не буде містити жодних можливих шляхів, через які мармур може застрягнути в машині для невизначеної кількості ітерацій, як-от
\/
або^^
. - Діаграма містить лише вищезазначені поля.
- Є одне або кілька джерел
Результат
Вашим завданням буде генерувати 16-рядковий високий графік ASCII розподілу ймовірностей, при якому мармур виходить з нижньої сторони графіка, масштабується так, що найбільша ймовірність охоплює всі 16 символів. Отже, для наступної проблеми:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
Ваша програма повинна створити таке рішення (зауважте, що вона повинна мати ту саму ширину, що і вхідна програма, включаючи труби збоку:
# #
# #
# #
# #
# #
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # # # #
# # # # # #
Приклади
Нижче наведено приклад, який повинен перевірити функціональність усіх різних типів полів:
| O O |
| O ^ / <^\\\ |
| ^ > ^ |
| ^ ^ ^ =|
| ^ ^ | ^ <^ O |
| ^ > ^ | ^ O ^> v |
|| ^U ^ | = ^\ |
| ^ ^ ^ ^U ^\ ---^ |
| = ^ ^ = v |
Це має призвести до такого результату:
#
#
#
#
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
## # # #
## # # # #
# ### # # # #
# # ### # # # #
# # ### # # # #
Правила
Як функції, так і повні програми складають вагомі відповіді на це завдання. Ви отримаєте діаграму у вигляді рядка, розділеного рядком, і ви повинні повернути вихідний графік у заданому форматі. Застосовуються правила вводу / виводу за замовчуванням . Незважаючи на те, що у вихідному дозволеному рядку допускаються останні та нові рядки, кожен рядок повинен мати точно таку ж ширину, що і вхідний.
Що стосується більш творчих рішень, потрібно лише, щоб ваша програма виводила правильний результат більше 90% часу для тієї ж діаграми. Адже це вірогідне моделювання.
Оцінка балів
Це код-гольф , тому найнижча оцінка в байтах виграє.
v
= [space]
?
v
і [space]
відрізняються тим, як гармати взаємодіють навколо них.