Considere esta versión ASCII de un mecanismo similar a una máquina de frijoles o un juego plinko / pachinko :
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
El O
es una bola que se cae.
- Cuando golpea a
^
, hay una probabilidad de 50-50 de ir hacia la izquierda o hacia la derecha. - Cuando golpea a
/
, siempre sale a la izquierda. - Cuando golpea a
\
, siempre sale bien.
La pelota finalmente cae en uno de los U
canales numerados en la parte inferior. La pregunta es, ¿cuál es la probabilidad de que termine en cada canal?
Para este caso particular, las probabilidades son 0.0
, 0.1875
, 0.5625
, 0.125
, y 0.125
, en los canales de 1 a 5 respectivamente.
He aquí otro ejemplo con 3 canales en lugar de 5. Las probabilidades son 0.5
, 0.5
, y 0.0
:
O
/
^ ^
U U U
1 2 3
En este desafío, generalizaremos este problema a un mecanismo con cualquier número de capas configuradas de cualquier manera.
Reto
Escriba un programa o función que tome la representación ASCII de la estructura piramidal del mecanismo. (Entrada a través de stdin / línea de comando / función arg.)
Puede suponer que viene con espacios que lo ponen en la forma adecuada, por ejemplo
^
\ ^
^ ^ \
\ ^ / ^
O puede suponer que viene sin espacios, por ej.
^
\^
^^\
\^/^
(Si lo desea, puede suponer que hay una nueva línea final y / o algún patrón consistente de espacios finales).
La estructura de la pirámide de entrada puede tener cualquier número de niveles (también conocidos como líneas), incluido cero. Cada nivel tiene uno más ^
, /
o \
que el anterior, y hay levels + 1
canales en la parte inferior (que no son parte de la entrada).
Su programa / función debe imprimir / devolver la lista de las probabilidades de que la bola caiga en cada uno de los canales (en el orden de la izquierda a la derecha). Estos deben ser valores de coma flotante que, cuando se imprimen, tienen al menos 3 decimales (no se requieren ceros ni puntos decimales superfluos; 1
está bien para 1.000
, .5
está bien para 0.500
, etc.). Si escribió una función, puede imprimir los valores o devolver una lista / matriz de los flotantes.
Cualquier formato razonable de lista impresa está bien. por ejemplo 0.5 0.5 0.0
, [0.5 0.5 0.0]
, [0.5, 0.5, 0.0]
, {0.5, 0.5, 0.0}
, o 0.5\n0.5\n0.0
todo estaría bien.
Ejemplos
0 niveles: (se reduce a un trivial U
)
Entrada: [no input/empty string given]
Salida:1.0
1 nivel:
Entrada: ^
Salida:0.5 0.5
Entrada: /
Salida:1.0 0.0
Entrada: \
Salida:0.0 1.0
2 niveles: (segundo ejemplo anterior)
Entrada:
/
^ ^
Salida: 0.5 0.5 0.0
3 niveles:
Entrada:
^
^ ^
^ ^ ^
Salida: 0.125 0.375 0.375 0.125
Entrada:
\
/ \
/ / \
Salida: 0.0 0.0 0.0 1.0
4 niveles: (primer ejemplo anterior)
Entrada:
^
\ ^
^ ^ \
\ ^ / ^
Salida: 0.0 0.1875 0.5625 0.125 0.125
7 niveles:
Entrada:
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
Salida: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0
Tanteo
La respuesta más corta en bytes gana. Tiebreaker es una publicación anterior.