Рассмотрим ASCII версию механизма , сходного с бобовой машины или plinko / пачинко игры:
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
Это O
шар, который падает вниз.
- Когда он поражает
^
, есть 50-50 шансов, что он пойдет влево или вправо. - Когда он попадает в
/
, он всегда идет влево. - Когда он попадает
\
, он всегда идет правильно.
Мяч в конце концов попадает в одну из пронумерованных 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-представление структуры пирамиды механизма. (Ввод через стандартный ввод / командную строку / аргумент функции.)
Вы можете предположить, что он входит с пробелами, которые приводят его в правильную форму, например
^
\ ^
^ ^ \
\ ^ / ^
Или вы можете предположить, что он вводится без пробелов, например
^
\^
^^\
\^/^
(При желании вы можете предположить, что есть завершающий символ новой строки и / или некоторый непротиворечивый шаблон пробелов.)
Структура входной пирамиды может иметь любое количество уровней (или линий), включая ноль. Каждый уровень имеет еще один ^
, /
или \
чем последний, и есть 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 - более ранний пост.