Estás remando una canoa por un río de aguas blancas bastante rápido. De repente, tus remos explotan, y te encuentras en una situación peligrosa que se precipita río abajo rápidamente sin remos. Afortunadamente, todavía tiene sus habilidades de programación, por lo que decide tallar un programa en el costado de su canoa para ayudarlo a sobrevivir a los rápidos. Sin embargo, no hay mucha superficie en el costado de la canoa para escribir su programa, por lo que debe hacer que el programa sea lo más corto posible.
El río se puede representar como una cuadrícula de 8 por 16. Vamos a etiquetar las columnas con los números 0
a 7
y las filas con los números0
a 15
.
y
--------15
--------14
--------13
--------12
--------11
--------10
--------9
--------8
--------7
--------6
--------5
--------4
--------3
--------2
--------1
--------0
01234567
x
Arriba: un río completamente tranquilo y ordinario sin obstrucciones. Naturalmente, este no es el río en el que estás.
Usted comienza en la coordenada (4, 0) y desde allí se mueve incontrolablemente río arriba (es decir, el vector (0,1)
) hasta que golpea una roca (representada por una o
en estos ejemplos). Cuando golpeas una roca, tendrás una probabilidad del 55% de pasar la roca hacia la izquierda (es decir, el vector (-1,1)
) y una probabilidad del 45% de pasar la roca hacia la derecha (es decir, el vector(1,1)
). Si la canoa está en las columnas del extremo izquierdo o derecho, siempre se moverá hacia el centro. Si no hay rocas, se moverá hacia arriba.
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
Arriba: una posible ruta que puede tomar la canoa, representada usando el personaje x
Dado el mapa del río, escriba un programa que genere la probabilidad de que la canoa termine en una columna dada.
Acepte la entrada en cualquier método que sea conveniente para su programa (por ejemplo, STDIN, argumento de línea de comando, raw_input()
, lectura de un archivo, etc.). La primera parte de la entrada es un número entero único de 0 a 7, que representa la columna para la que el programa encontrará la probabilidad. A continuación hay una lista de tuplas en la forma que x,y
representa la posición de las piedras.
Un ejemplo:
Entrada:
4 4,1 5,5 3,5
Esto indicaría un río con rocas en las posiciones (4,1), (5,5) y (3,5), y solicita la probabilidad de que la canoa termine en la cuarta columna.
Salida:
0.495
Tenga en cuenta que en este ejemplo, las posiciones de las rocas eran simétricas, lo que permitió resolver el problema con una distribución binomial. ¡Este no siempre será el caso!
Además, el río siempre será transitable. Es decir, nunca habrá dos rocas que se coloquen adyacentes horizontalmente. Ver el comentario de Glenn para un ejemplo de un caso imposible.
Este es el código de golf, por lo que gana el menor número de caracteres. Siéntase libre de hacer preguntas en los comentarios si la especificación no es clara.