Comme le titre peut le suggérer, ce problème est semi-inspiré du Polite Near-Sighted Drunk Bot par @NP
Notre pauvre bot est placé sur une grille cartésienne à l'origine, et après chaque minute, il se déplace de 1 unité dans l'une des quatre directions (Haut, Bas, Gauche, Droite).
Après n minutes, toutes les mines latentes sur la grille s'activent, tuant tout pauvre bot qui pourrait se retrouver sur elles. Les mines sont situées à toutes les coordonnées entières satisfaisant l'équation | y | = | x |.
Défi
Vous recevrez n , le nombre de minutes avant l'explosion des mines, en entrée et en sortie, vous devez trouver la probabilité que le bot soit mort .
Entrée : Un nombre naturel représentant n .
Sortie : Soit p / q la probabilité que le bot soit mort , où p et q sont des nombres entiers premiers (q ne peut pas être 0, mais p le peut). Sortie p.
Règles
- Votre algorithme ne doit pas fonctionner en temps exponentiel ou supérieur. Il devrait idéalement fonctionner en temps polynomial ou moins.
- Votre algorithme doit être capable de gérer des entrées
n
<20 (peut être ajusté s'il est trop difficile) dans un délai raisonnable. - Il s'agit d'un défi de code-golf .
- Itérer sur toutes les possibilités pour un n donné ne sera certainement pas accepté comme réponse.
Cas de test
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
Exemple de calcul pour n = 6
Nous avons 4 mouvements possibles: U, D, R et L. Le nombre total de chemins qui pourraient être empruntés est 4 ^ 6 ou 4096. Il y a 4 cas possibles qui atterrissent le long de la ligne y = x: x, y = ± 1; x, y = ± 2; x, y = ± 3; ou x = y = 0. Nous compterons le nombre de façons de finir à (1,1), (2,2) et (3,3), les multiplier par 4 pour tenir compte des autres quadrants et ajouter ceci au nombre de façons de finir à (0,0).
Cas 1: Le bot se termine à (3, 3). Pour que le bot se retrouve ici, il doit avoir eu 3 mouvements à droite et 3 mouvements vers le haut. En d'autres termes, le nombre total de façons d'arriver ici est le moyen de réorganiser les lettres dans la séquence RRRUUU, qui est de 6 choisir 3 = 20.
Cas 2: Le bot se termine à (2,2). Pour que le bot se retrouve ici, il aurait pu avoir 2 mouvements vers le haut, 3 mouvements vers la droite et 1 mouvement vers la gauche; ou 2 mouvements à droite, 3 mouvements vers le haut et 1 mouvement vers le bas. Ainsi, le nombre total de façons d'arriver ici est la somme des façons de réorganiser les lettres dans les séquences RRRLUU et UUUDRR, qui sont toutes les deux (6 choisissez 1) * (5 choisissez 2) = 60, pour un total de 120 possibilités .
Cas 3: Le bot se termine à (1,1). Pour que le bot se retrouve ici, il aurait dû y avoir: 1 mouvement à droite, 3 mouvements vers le haut et 2 mouvements vers le bas. Dans ce cas, le nombre de façons de réorganiser les lettres dans la séquence RUUUDD est (6 choisissez 1) * (5 choisissez 2) = 60.
1 mouvement vers le haut, 3 mouvements vers la droite et 2 mouvements vers la gauche. Dans ce cas, le nombre de façons de réorganiser les lettres dans la séquence URRRLL est (6 choisissez 1) * (5 choisissez 2) = 60.
2 mouvements à droite, 1 mouvement à gauche, 2 mouvements vers le haut et 1 mouvement vers le bas. Dans ce cas, le nombre de façons de réorganiser les lettres dans la séquence UUDRRL est (6 choisissez 1) * (5 choisissez 1) * (4 choisissez 2) = 180.
Ainsi, le nombre total de façons de se retrouver à (1,1) est de 300.
Cas 4: Le bot se termine à (0,0). Pour que le bot se retrouve ici, il aurait dû avoir:
3 mouvements à droite et 3 mouvements à gauche. Dans ce cas, le nombre de façons de réorganiser les lettres dans la séquence RRRLLL est (6 choisissez 3) = 20.
3 mouvements vers le haut et 3 mouvements vers le bas. Dans ce cas, le nombre de façons de réorganiser les lettres dans la séquence UUUDDD est (6 choisissez 3) = 20.
1 mouvement à droite, 1 mouvement à gauche, 2 mouvements vers le haut et 2 mouvements vers le bas. Dans ce cas, le nombre de façons de réorganiser les lettres dans la séquence RLUUDD est (6 choisissez 1) * (5 choisissez 1) * (4 choisissez 2) = 180.
1 mouvement vers le haut, 1 mouvement vers le bas, 2 mouvements vers la droite et 2 mouvements vers la gauche. Dans ce cas, le nombre de façons de réorganiser les lettres dans la séquence RRLLUD est (6 choisissez 1) * (5 choisissez 1) * (4 choisissez 2) = 180.
Ainsi, le nombre total de façons de se retrouver à (0,0) est de 400.
En additionnant ces cas, nous obtenons que le nombre total de façons de se retrouver sur | y | = | x | est 4 (20 + 120 + 300) + 400 = 2160. Ainsi, notre probabilité est 2160/4096. Lorsque cette fraction est entièrement réduite, elle est de 135/256, donc notre réponse est 135 .