Rozważ tę wersję ASCII mechanizmu podobnego do maszyny do fasoli lub gry Plinko / Pachinko :
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
O
Jest piłka, która spada w dół.
- Kiedy trafi w
^
, istnieje 50-50 szans, że pójdzie w lewo lub w prawo. - Kiedy uderza w
/
, zawsze idzie w lewo. - Kiedy uderza w
\
, zawsze idzie dobrze.
Piłka ostatecznie wpada do jednej z ponumerowanych U
korytek na dole. Pytanie brzmi: jakie jest prawdopodobieństwo, że skończy w każdej niecce?
W tym konkretnym przypadku, to prawdopodobieństwo 0.0
, 0.1875
, 0.5625
, 0.125
i 0.125
, dla korytek 1 do 5 odpowiednio.
Oto kolejny przykład z 3 niecek zamiast 5. są szanse 0.5
, 0.5
oraz 0.0
:
O
/
^ ^
U U U
1 2 3
W tym wyzwaniu uogólnimy ten problem na mechanizm z dowolną liczbą warstw skonfigurowanych w dowolny sposób.
Wyzwanie
Napisz program lub funkcję, która przyjmuje reprezentację ASCII struktury piramidy mechanizmu. (Wprowadzane przez stdin / wiersz poleceń / funkcję arg.)
Możesz albo założyć, że wchodzi ze spacjami, które nadają mu odpowiedni kształt, np
^
\ ^
^ ^ \
\ ^ / ^
Możesz też założyć, że wchodzi bez spacji, np
^
\^
^^\
\^/^
(W razie potrzeby możesz założyć, że istnieje nowa linia i / lub jakiś spójny wzór spacji końcowych).
Struktura piramidy wejściowej może mieć dowolną liczbę poziomów (czyli linii), w tym zero. Każdy poziom zawiera jeden ^
, /
lub \
od poprzedniego, a są levels + 1
niecki na dnie (nie będące częścią wejściu).
Twój program / funkcja musi wydrukować / zwrócić listę prawdopodobieństw, że kula wyląduje w każdej z koryt (w kolejności od lewej do lewej do lewej). Powinny to być wartości zmiennoprzecinkowe, które po wydrukowaniu mają co najmniej 3 miejsca po przecinku (zbędne zera lub kropki po przecinku nie są wymagane; 1
jest w porządku dla 1.000
, .5
jest w porządku 0.500
itp.). Jeśli napisałeś funkcję, możesz wydrukować wartości lub zwrócić listę / tablicę liczb zmiennoprzecinkowych.
Każdy rozsądny format listy drukowanej jest w porządku. np 0.5 0.5 0.0
, [0.5 0.5 0.0]
, [0.5, 0.5, 0.0]
, {0.5, 0.5, 0.0}
, lub 0.5\n0.5\n0.0
będzie wszystko w porządku.
Przykłady
0 poziomów: (sprowadza się do jednego trywialnego U
)
Wejście: [no input/empty string given]
Wyjście:1.0
1 poziom:
Wejście: ^
Wyjście:0.5 0.5
Wejście: /
Wyjście:1.0 0.0
Wejście: \
Wyjście:0.0 1.0
2 poziomy: (drugi przykład powyżej)
Wejście:
/
^ ^
Wynik: 0.5 0.5 0.0
3 poziomy:
Wejście:
^
^ ^
^ ^ ^
Wynik: 0.125 0.375 0.375 0.125
Wejście:
\
/ \
/ / \
Wynik: 0.0 0.0 0.0 1.0
4 poziomy: (pierwszy przykład powyżej)
Wejście:
^
\ ^
^ ^ \
\ ^ / ^
Wynik: 0.0 0.1875 0.5625 0.125 0.125
7 poziomów:
Wejście:
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
Wynik: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0
Punktacja
Najkrótsza odpowiedź w bajtach wygrywa. Tiebreaker jest wcześniejszym postem.