Vous pagayez en canoë sur une rivière d'eau vive assez rapide. Soudain, vos pagaies explosent et vous vous retrouvez dans une situation dangereuse dévalant une rivière rapide sans pagaies. Heureusement, vous avez toujours vos compétences en programmation, vous décidez donc de vous tailler un programme sur le côté de votre canoë pour vous aider à survivre aux rapides. Cependant, il n'y a pas beaucoup de surface sur le côté du canoë pour écrire votre programme, vous devez donc le rendre aussi court que possible.
La rivière peut être représentée par une grille de 8 sur 16. Nous allons étiqueter les colonnes avec les nombres 0
à 7
et les lignes avec les nombres 0
à 15
.
y
--------15
--------14
--------13
--------12
--------11
--------10
--------9
--------8
--------7
--------6
--------5
--------4
--------3
--------2
--------1
--------0
01234567
x
Ci-dessus: une rivière ordinaire, complètement calme et sans obstruction. Naturellement, ce n'est pas la rivière sur laquelle vous vous trouvez.
Vous commencez aux coordonnées (4, 0) et à partir de là, vous remontez de façon incontrôlable la rivière (c'est-à-dire le vecteur (0,1)
) jusqu'à ce que vous heurtiez un rocher (représenté par un o
dans ces exemples). Lorsque vous frappez un rocher, vous aurez 55% de chances de passer devant le rocher vers la gauche (ie le vecteur (-1,1)
) et 45% de chances de passer devant le rocher vers la droite (ie le vecteur (1,1)
). Si le canoë est sur les colonnes à l'extrême gauche ou à droite, il se déplacera toujours vers le centre. S'il n'y a pas de roches, il se déplacera tout droit vers le haut.
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
Ci-dessus: un itinéraire possible que le canoë pourrait emprunter, représenté à l'aide du caractère x
Étant donné la carte de la rivière, écrivez un programme qui affichera la probabilité que le canoë se termine à une colonne donnée.
Acceptez la saisie selon la méthode qui convient à votre programme (par exemple, STDIN, argument de ligne de commande raw_input()
, lecture à partir d'un fichier, etc.). La première partie de l'entrée est un entier unique de 0 à 7, représentant la colonne pour laquelle le programme trouvera la probabilité. Ensuite, une liste de tuples sous la forme x,y
représentant la position des pierres.
Un exemple:
Contribution:
4 4,1 5,5 3,5
Cela indiquerait une rivière avec des rochers aux positions (4,1), (5,5) et (3,5), et demande la probabilité que le canoë se termine à la 4e colonne.
Sortie:
0.495
Notez que dans cet exemple, les positions des roches étaient symétriques, permettant de résoudre le problème avec une distribution binomiale. Ce ne sera pas toujours le cas!
De plus, la rivière sera toujours traversable. Autrement dit, il n'y aura jamais deux roches placées côte à côte horizontalement. Voir le commentaire de Glenn pour un exemple d'un cas impossible.
C'est le golf de code, donc le plus petit nombre de personnages gagne. N'hésitez pas à poser des questions dans les commentaires si la spécification n'est pas claire.