Розглянемо ASCII версію механізму , схожого з бобової машини або plinko / пачинко гри:
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
O
Куля , який падає вниз.
- Коли він потрапляє на a
^
, є 50-50 шансів, що він піде вліво або вправо. - Коли він потрапляє на a
/
, він завжди йде ліворуч. - Коли він потрапляє на a
\
, він завжди йде правильно.
Зрештою куля потрапляє в одне з пронумерованих U
жолобів на дні. Питання полягає в тому, яка ймовірність, що вона закінчиться в кожному кориті?
Для цього конкретного випадку, ймовірно є 0.0
, 0.1875
, 0.5625
, 0.125
і 0.125
, по жолобах з 1 по 5 відповідно.
Ось ще один приклад з 3 западинами замість 5. Вірогідність є 0.5
, 0.5
, і 0.0
:
O
/
^ ^
U U U
1 2 3
У цьому виклику ми узагальнимо цю проблему до механізму з будь-якою кількістю шарів, встановлених будь-яким способом.
Виклик
Напишіть програму або функцію, яка приймає в ASCII подання структури піраміди механізму. (Введення через stdin / командний рядок / аргумент функції.)
Ви можете припустити, що він поставляється з пробілами, які приводять його в належну форму, наприклад
^
\ ^
^ ^ \
\ ^ / ^
Або ви можете припустити, що він входить зовсім без пробілів, наприклад
^
\^
^^\
\^/^
(За бажанням, ви можете припустити, що існує затримка нового рядка та / або деякий узгоджений шаблон пробілів.
Структура вхідної піраміди може мати будь-яку кількість рівнів (ака-ліній), включаючи нуль. Кожен рівень має ще один ^
, /
або \
чим останній, і є levels + 1
западини на день (які не є частиною введення).
Ви програма / функція повинні надрукувати / повернути список ймовірностей того, що кулька приземлиться у кожному з жолобів (у порядку, що знаходиться вліво, до крайнього правого корита). Це мають бути значення з плаваючою комою, які при друкуванні містять щонайменше 3 десяткових знаки (зайві нулі чи десяткові крапки не потрібні; 1
це нормально 1.000
, .5
добре для 0.500
тощо). Якщо ви написали функцію, ви можете надрукувати значення або повернути список / масив плавців.
Будь-який розумний формат друкованого списку - це добре. наприклад 0.5 0.5 0.0
, [0.5 0.5 0.0]
, [0.5, 0.5, 0.0]
, {0.5, 0.5, 0.0}
або 0.5\n0.5\n0.0
все буде в порядку.
Приклади
0 Рівні: (зводиться до однієї тривіальної U
)
Вхід: [no input/empty string given]
Вихід:1.0
1 рівень:
Вхід: ^
Вихід:0.5 0.5
Вхід: /
Вихід:1.0 0.0
Вхід: \
Вихід:0.0 1.0
2 рівня: (другий приклад вище)
Вхід:
/
^ ^
Вихід: 0.5 0.5 0.0
3 рівня:
Вхід:
^
^ ^
^ ^ ^
Вихід: 0.125 0.375 0.375 0.125
Вхід:
\
/ \
/ / \
Вихід: 0.0 0.0 0.0 1.0
4 рівня: (перший приклад вище)
Вхід:
^
\ ^
^ ^ \
\ ^ / ^
Вихід: 0.0 0.1875 0.5625 0.125 0.125
7 рівнів:
Вхід:
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
Вихід: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0
Оцінка балів
Виграє найкоротша відповідь у байтах. Tiebreaker - це раніше повідомлення.