Você está remando em uma canoa em um rio de águas claras razoavelmente rápido. De repente, seus remos explodem e você se encontra em uma situação perigosa que desce rapidamente um rio sem remos. Felizmente, você ainda tem suas habilidades de programação, por isso decide criar um programa na lateral da sua canoa para ajudá-lo a sobreviver às corredeiras. No entanto, como não há muita área de superfície na lateral da canoa para escrever seu programa, você deve torná-lo o mais curto possível.
O rio pode ser representado como uma grade de 8 por 16. Iremos rotular as colunas com os números 0
para 7
e as linhas com os números 0
para 15
.
y
--------15
--------14
--------13
--------12
--------11
--------10
--------9
--------8
--------7
--------6
--------5
--------4
--------3
--------2
--------1
--------0
01234567
x
Acima: Um rio completamente calmo e comum, sem obstruções. Naturalmente, este não é o rio em que você está.
Você começa na coordenada (4, 0) e daí sobe incontrolavelmente no rio (ou seja, o vetor (0,1)
) até atingir uma rocha (representada por um o
nesses exemplos). Quando você bate em uma pedra, você tem 55% de chance de passar da pedra para a esquerda (ou seja, o vetor (-1,1)
) e 45% de chance de passar da pedra para a direita (ou seja, o vetor (1,1)
). Se a canoa estiver nas colunas da extrema esquerda ou direita, ela sempre se moverá em direção ao centro. Se não houver pedras, ela se moverá para cima.
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
Acima: Uma possível rota que a canoa pode seguir, representada usando o personagem x
Dado o mapa do rio, escreva um programa que mostre a probabilidade de a canoa terminar em uma determinada coluna.
Aceite a entrada no método que for mais conveniente para o seu programa (por exemplo, STDIN, argumento de linha de comando raw_input()
, leitura de um arquivo, etc.). A primeira parte da entrada é um único inteiro de 0 a 7, representando a coluna para a qual o programa encontrará a probabilidade. A seguir, é apresentada uma lista de tuplas na forma que x,y
representa a posição das pedras.
Um exemplo:
Entrada:
4 4,1 5,5 3,5
Isso indicaria um rio com rochas nas posições (4,1), (5,5) e (3,5), e pedia a probabilidade da canoa terminar na 4ª coluna.
Saída:
0.495
Observe que neste exemplo, as posições das rochas eram simétricas, permitindo que o problema fosse resolvido com uma distribuição binomial. Nem sempre será esse o caso!
Além disso, o rio será sempre atravessável. Ou seja, nunca haverá duas rochas posicionadas adjacentes uma à outra horizontalmente. Veja o comentário de Glenn para um exemplo de caso impossível.
Este é o código de golfe, portanto, o menor número de caracteres vence. Sinta-se à vontade para fazer perguntas nos comentários, se a especificação não estiver clara.