Come può suggerire il titolo, questo problema è semi-ispirato dal Polite Near-Sighted Drunk Bot di @NP
Il nostro povero bot viene posizionato su una griglia cartesiana all'origine e, dopo ogni minuto, si sposta di 1 unità in una delle quattro direzioni (Su, Giù, Sinistra, Destra).
Dopo n minuti, tutte le miniere latenti sulla griglia si attivano, uccidendo qualsiasi bot povero che potrebbe trovarsi su di esse. Le mine si trovano su tutte le coordinate intere che soddisfano l'equazione | y | = | x |.
Sfida
Ti verrà fornito n , il numero di minuti prima dell'esplosione delle miniere, come input e come output, devi trovare la probabilità che il bot sia morto .
Input : un numero naturale che rappresenta n .
Output : lascia che la probabilità che il bot sia morto sia p / q, dove p e q sono numeri interi relativamente primi (q non può essere 0, ma p può). Uscita p.
Regole
- L'algoritmo non deve essere eseguito in tempo esponenziale o superiore. Idealmente dovrebbe funzionare in un tempo polinomiale o inferiore.
- L'algoritmo deve essere in grado di gestire input di
n
<20 (può essere regolato se troppo difficile) in un tempo ragionevole. - Questa è una sfida di code-golf .
- L'iterazione su tutte le possibilità per una data n non sarà sicuramente accettata come risposta.
Casi test
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
Esempio di calcolo per n = 6
Abbiamo 4 possibili mosse: U, D, R e L. Il numero totale di percorsi che potrebbero essere presi è 4 ^ 6 o 4096. Esistono 4 casi possibili che atterrano lungo la linea y = x: x, y = ± 1; x, y = ± 2; x, y = ± 3; oppure x = y = 0. Conteremo il numero di modi per arrivare a (1,1), (2,2) e (3,3), moltiplicarli per 4 per tenere conto degli altri quadranti e aggiungere questo per il numero di modi per finire a (0,0).
Caso 1: il bot termina in (3, 3). Affinché il bot finisca qui, deve aver avuto 3 mosse giuste e 3 mosse in alto. In altre parole, il numero totale di modi per arrivare qui è il modo di riordinare le lettere nella sequenza RRRUUU, che è 6 scegli 3 = 20.
Caso 2: il bot termina in (2,2). Affinché il bot finisse qui, avrebbe potuto avere 2 mosse in alto, 3 mosse a destra e 1 a sinistra; oppure 2 mosse giuste, 3 mosse in alto e 1 mossa in basso. Pertanto, il numero totale di modi per arrivare qui è la somma dei modi per riorganizzare le lettere nelle sequenze RRRLUU e UUUDRR, che sono entrambe (6 scegli 1) * (5 scegli 2) = 60, per un totale di 120 possibilità .
Caso 3: il bot termina in (1,1). Affinché il bot finisse qui, avrebbe potuto avere: 1 mossa giusta, 3 mosse in alto e 2 mosse in basso. In questo caso, il numero di modi per riorganizzare le lettere nella sequenza RUUUDD è (6 scegli 1) * (5 scegli 2) = 60.
1 mossa in alto, 3 mosse a destra e 2 mosse a sinistra. In questo caso, il numero di modi per riordinare le lettere nella sequenza URRRLL è (6 scegli 1) * (5 scegli 2) = 60.
2 mosse a destra, 1 mossa a sinistra, 2 mosse in alto e 1 mossa in basso. In questo caso, il numero di modi per riordinare le lettere nella sequenza UUDRRL è (6 scegli 1) * (5 scegli 1) * (4 scegli 2) = 180.
Pertanto, il numero totale di modi per arrivare a (1,1) è 300.
Caso 4: il bot termina in (0,0). Affinché il bot finisse qui, avrebbe potuto avere:
3 mosse a destra e 3 mosse a sinistra. In questo caso, il numero di modi per riordinare le lettere nella sequenza RRRLLL è (6 scegli 3) = 20.
3 mosse in alto e 3 mosse in basso. In questo caso, il numero di modi per riordinare le lettere nella sequenza UUUDDD è (6 scegli 3) = 20.
1 mossa destra, 1 mossa sinistra, 2 mosse in alto e 2 mosse in basso. In questo caso, il numero di modi per riordinare le lettere nella sequenza RLUUDD è (6 scegli 1) * (5 scegli 1) * (4 scegli 2) = 180.
1 mossa in alto, 1 mossa in basso, 2 mosse a destra e 2 mosse a sinistra. In questo caso, il numero di modi per riorganizzare le lettere nella sequenza RRLLUD è (6 scegli 1) * (5 scegli 1) * (4 scegli 2) = 180.
Pertanto, il numero totale di modi per arrivare a (0,0) è 400.
Sommando questi casi insieme, otteniamo che il numero totale di modi per finire su | y | = | x | è 4 (20 + 120 + 300) + 400 = 2160. Pertanto, la nostra probabilità è 2160/4096. Quando questa frazione è completamente ridotta, è 135/256, quindi la nostra risposta è 135 .