Considere esta versão ASCII de um mecanismo semelhante a uma máquina de feijão ou a um jogo plinko / pachinko :
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
A O
é uma bola que cai.
- Quando atinge um
^
, há uma chance de 50 a 50 de ir para a esquerda ou direita. - Quando atinge a
/
, sempre sai para a esquerda. - Quando atinge a
\
, sempre dá certo.
A bola eventualmente cai em uma das U
valas numeradas na parte inferior. A questão é: qual é a probabilidade de acabar em cada vale?
Para este caso particular, as probabilidades são 0.0
, 0.1875
, 0.5625
, 0.125
, e 0.125
, por calhas de 1 até 5 respectivamente.
Aqui está outro exemplo com 3 calhas em vez de 5. As probabilidades são 0.5
, 0.5
, e 0.0
:
O
/
^ ^
U U U
1 2 3
Neste desafio, generalizaremos esse problema para um mecanismo com qualquer número de camadas configuradas de qualquer maneira.
Desafio
Escreva um programa ou função que absorva a representação ASCII da estrutura em pirâmide do mecanismo. (Entrada via stdin / linha de comando / função arg.)
Você pode assumir que ele vem com espaços que o colocam na forma correta, por exemplo,
^
\ ^
^ ^ \
\ ^ / ^
Ou você pode assumir que ele não possui espaços, por exemplo,
^
\^
^^\
\^/^
(Se desejar, você pode assumir que há uma nova linha à direita e / ou algum padrão consistente de espaços à direita).
A estrutura da pirâmide de entrada pode ter qualquer número de níveis (também conhecido como linhas), incluindo zero. Cada nível tem mais um ^
, /
ou \
que a última, e há levels + 1
depressões na parte inferior (que não são parte da entrada).
Você programa / função deve imprimir / retornar a lista de probabilidades de que a bola caia em cada uma das valas (na ordem da esquerda para a direita). Devem ser valores de ponto flutuante que, quando impressos, têm pelo menos três casas decimais (zeros supérfluos ou pontos decimais não são necessários; 1
é bom para 1.000
, .5
é bom para 0.500
etc.). Se você escreveu uma função, pode imprimir os valores ou retornar uma lista / matriz dos carros alegóricos.
Qualquer formato razoável de lista impressa é bom. por exemplo 0.5 0.5 0.0
, [0.5 0.5 0.0]
, [0.5, 0.5, 0.0]
, {0.5, 0.5, 0.0}
, ou 0.5\n0.5\n0.0
tudo seria bem.
Exemplos
0 Níveis: (resume-se a um trivial U
)
Entrada: [no input/empty string given]
Saída:1.0
1 Nível:
Entrada: ^
Saída:0.5 0.5
Entrada: /
Saída:1.0 0.0
Entrada: \
Saída:0.0 1.0
2 níveis: (segundo exemplo acima)
Entrada:
/
^ ^
Saída: 0.5 0.5 0.0
3 Níveis:
Entrada:
^
^ ^
^ ^ ^
Saída: 0.125 0.375 0.375 0.125
Entrada:
\
/ \
/ / \
Saída: 0.0 0.0 0.0 1.0
4 níveis: (primeiro exemplo acima)
Entrada:
^
\ ^
^ ^ \
\ ^ / ^
Saída: 0.0 0.1875 0.5625 0.125 0.125
7 níveis:
Entrada:
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
Saída: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0
Pontuação
A resposta mais curta em bytes vence. O desempatador é uma publicação anterior.