Stai remando una canoa lungo un fiume di acque bianche abbastanza veloce. All'improvviso, le tue pagaie esplodono e ti ritrovi in una situazione pericolosa che sfreccia lungo un fiume veloce senza pagaie. Fortunatamente, hai ancora le tue capacità di programmazione, quindi decidi di scolpire un programma sul lato della tua canoa per aiutarti a sopravvivere alle rapide. Tuttavia, non c'è molta superficie sul lato della canoa con cui scrivere il programma, quindi è necessario rendere il programma il più breve possibile.
Il fiume può essere rappresentato come una griglia 8 per 16. Etichettiamo le colonne con i numeri 0
a 7
e le righe con i numeri 0
a 15
.
y
--------15
--------14
--------13
--------12
--------11
--------10
--------9
--------8
--------7
--------6
--------5
--------4
--------3
--------2
--------1
--------0
01234567
x
Sopra: un fiume completamente calmo e normale senza ostacoli. Naturalmente, questo non è il fiume in cui ti trovi.
Inizi alle coordinate (4, 0) e da lì ti muovi in modo incontrollato sul fiume (cioè il vettore (0,1)
) fino a colpire una roccia (rappresentata da una o
in questi esempi). Quando colpisci una roccia, avrai una probabilità del 55% di spostarti oltre la roccia a sinistra (cioè il vettore (-1,1)
) e una probabilità del 45% di spostarti oltre la roccia a destra (cioè il vettore (1,1)
). Se la canoa si trova sulle colonne più a sinistra o a destra, si sposterà sempre verso il centro. Se non ci sono rocce, si sposterà direttamente verso l'alto.
y
----x---15
----xo--14
-o--x---13
----x---12
---ox---11
---x----10
---xo---9
---ox---8
----xo--7
-----x--6
----ox--5
-o--x---4
----x---3
----xo--2
----x---1
----x---0
01234567
Sopra: un possibile percorso che la canoa potrebbe prendere, rappresentato usando il personaggio x
Data la mappa del fiume, scrivi un programma che fornirà la probabilità che la canoa finisca in una data colonna.
Accetta l'input in qualunque metodo sia conveniente per il tuo programma (es. STDIN, argomento della riga di comando raw_input()
, lettura da un file, ecc.). La prima parte dell'input è un singolo intero compreso tra 0 e 7, che rappresenta la colonna per la quale il programma troverà la probabilità. Di seguito è riportato un elenco di tuple nella forma che x,y
rappresenta la posizione delle pietre.
Un esempio:
Ingresso:
4 4,1 5,5 3,5
Ciò indicherebbe un fiume con rocce nelle posizioni (4,1), (5,5) e (3,5), e chiede la probabilità che la canoa finisca alla quarta colonna.
Produzione:
0.495
Si noti che in questo esempio, le posizioni delle rocce erano simmetriche, consentendo di risolvere il problema con una distribuzione binomiale. Questo non sarà sempre il caso!
Inoltre, il fiume sarà sempre attraversabile. Cioè, non ci saranno mai due rocce posizionate l'una accanto all'altra in senso orizzontale. Vedi il commento di Glenn per un esempio di caso impossibile.
Questo è il golf del codice, quindi vince il numero più basso di caratteri. Sentiti libero di porre domande nei commenti se le specifiche non sono chiare.