Considera questa versione ASCII di un meccanismo simile a una macchina bean o a un gioco plinko / pachinko :
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
La O
è una palla che cade.
- Quando colpisce un
^
, c'è una probabilità del 50-50 che andrà a sinistra o a destra. - Quando colpisce a
/
, va sempre a sinistra. - Quando colpisce a
\
, va sempre bene.
La palla alla fine cade in uno dei U
trogoli numerati in basso. La domanda è: qual è la probabilità che finisca in ogni depressione?
Per questo caso particolare, le probabilità sono 0.0
, 0.1875
, 0.5625
, 0.125
, e 0.125
, per trogoli 1 a 5, rispettivamente.
Ecco un altro esempio con 3 vasche invece di 5. Le probabilità sono 0.5
, 0.5
, e 0.0
:
O
/
^ ^
U U U
1 2 3
In questa sfida generalizzeremo questo problema a un meccanismo con un numero qualsiasi di livelli impostati in qualsiasi modo.
Sfida
Scrivi un programma o una funzione che includa la rappresentazione ASCII della struttura piramidale del meccanismo. (Input tramite stdin / riga di comando / arg funzione).
Puoi anche supporre che arrivi con spazi che lo mettano nella forma corretta, ad es
^
\ ^
^ ^ \
\ ^ / ^
Oppure puoi supporre che arrivi senza spazi, ad es
^
\^
^^\
\^/^
(Se lo si desidera, è possibile supporre che vi sia una nuova riga finale e / o un modello coerente di spazi finali).
La struttura della piramide di input può avere un numero qualsiasi di livelli (ovvero linee), incluso lo zero. Ogni livello ne ha uno in più ^
, /
o \
rispetto all'ultimo, e ci sono levels + 1
trogoli in fondo (che non fanno parte dell'input).
Il programma / funzione deve stampare / restituire l'elenco delle probabilità che la pallina atterra in ciascuno dei trogoli (nell'ordine più a sinistra a quello più a destra). Questi dovrebbero essere valori in virgola mobile che, quando stampati, hanno almeno 3 cifre decimali (non sono necessari zeri superflui o punti decimali; 1
va bene per 1.000
, .5
va bene per 0.500
, ecc.). Se hai scritto una funzione, puoi stampare i valori o restituire un elenco / matrice dei float.
Qualsiasi ragionevole formato di elenco stampato va bene. ad esempio 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
sarebbe stato tutto a posto.
Esempi
0 livelli: (si riduce a una banale U
)
Ingresso: [no input/empty string given]
Uscita:1.0
1 livello:
Ingresso: ^
Uscita:0.5 0.5
Ingresso: /
Uscita:1.0 0.0
Ingresso: \
Uscita:0.0 1.0
2 livelli: (secondo esempio sopra)
Ingresso:
/
^ ^
Produzione: 0.5 0.5 0.0
3 livelli:
Ingresso:
^
^ ^
^ ^ ^
Produzione: 0.125 0.375 0.375 0.125
Ingresso:
\
/ \
/ / \
Produzione: 0.0 0.0 0.0 1.0
4 livelli: (primo esempio sopra)
Ingresso:
^
\ ^
^ ^ \
\ ^ / ^
Produzione: 0.0 0.1875 0.5625 0.125 0.125
7 livelli:
Ingresso:
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
Produzione: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0
punteggio
Vince la risposta più breve in byte. Tiebreaker è post precedente.