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 Oes 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 Ucanales 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 + 1canales 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; 1está bien para 1.000, .5está 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.0todo 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.