Jak sama nazwa może sugerować, problem ten jest pół-zainspirowany uprzejmy pobliżu widzących Pijany Bot przez @NP
Nasz biedny bot jest umieszczany na kartezjańskiej siatce u źródła, a po każdej minucie przesuwa 1 jednostkę w jednym z czterech kierunków (w górę, w dół, w lewo, w prawo).
Po n minutach wszystkie utajone miny na siatce aktywują się, zabijając każdego biednego bota, który mógłby się nad nimi znaleźć. Kopalnie znajdują się przy wszystkich współrzędnych całkowitych spełniających równanie | y | = | x |.
Wyzwanie
Otrzymasz n , liczbę minut przed wybuchem min, jako dane wejściowe, a jako dane wyjściowe musisz znaleźć prawdopodobieństwo, że bot nie żyje .
Dane wejściowe : liczba naturalna reprezentująca n .
Wyjście : Niech prawdopodobieństwo, że bot nie żyje, wynosi p / q, gdzie p i q są względnie pierwszymi liczbami całkowitymi (q nie może być 0, ale p może). Wyjście p.
Zasady
- Twój algorytm nie może działać w wykładniczym lub wyższym czasie. Idealnie powinien działać w czasie wielomianowym lub krótszym.
- Twój algorytm musi być w stanie obsłużyć dane wejściowe
n
<20 (można je zmienić, jeśli są zbyt trudne) w rozsądnym czasie. - To wyzwanie dla golfa .
- Iteracja wszystkich możliwości dla danego n zdecydowanie nie zostanie zaakceptowana jako odpowiedź.
Przypadki testowe
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
Przykładowe obliczenia dla n = 6
Mamy 4 możliwe ruchy: U, D, R i L. Całkowita liczba ścieżek, które można wybrać, to 4 ^ 6 lub 4096. Istnieją 4 możliwe przypadki, które lądują wzdłuż linii y = x: x, y = ± 1; x, y = ± 2; x, y = ± 3; lub x = y = 0. Policzymy liczbę sposobów, aby skończyć na (1,1), (2,2) i (3,3), pomnóż je przez 4, aby uwzględnić pozostałe kwadranty i dodaj to liczba sposobów, aby skończyć na (0,0).
Przypadek 1: Bot kończy się na (3, 3). Aby bot się tu znalazł, musiał mieć 3 ruchy w prawo i 3 ruchy w górę. Innymi słowy, łączna liczba sposobów na dotarcie tutaj to sposoby zmiany kolejności liter w sekwencji RRRUUU, czyli 6 wybierz 3 = 20.
Przypadek 2: Bot kończy się na (2,2). Aby bot mógł się tutaj znaleźć, mógł mieć 2 ruchy w górę, 3 ruchy w prawo i 1 ruch w lewo; lub 2 ruchy w prawo, 3 ruchy w górę i 1 ruch w dół. Tak więc łączna liczba sposobów na dotarcie tutaj to suma sposobów zmiany kolejności liter w sekwencjach RRRLUU i UUUDRR, z których oba to (6 wybierz 1) * (5 wybierz 2) = 60, w sumie 120 możliwości .
Przypadek 3: Bot kończy się na (1,1). Aby bot mógł się tutaj znaleźć, mógł mieć: 1 ruch w prawo, 3 ruchy w górę i 2 ruchy w dół. W takim przypadku liczba sposobów zmiany kolejności liter w sekwencji RUUUDD wynosi (6 wybierz 1) * (5 wybierz 2) = 60.
1 ruch w górę, 3 ruchy w prawo i 2 ruchy w lewo. W takim przypadku liczba sposobów zmiany kolejności liter w sekwencji URRRLL wynosi (6 wybierz 1) * (5 wybierz 2) = 60.
2 ruchy w prawo, 1 ruch w lewo, 2 ruchy w górę i 1 ruch w dół. W takim przypadku liczba sposobów zmiany kolejności liter w sekwencji UUDRRL wynosi (6 wybierz 1) * (5 wybierz 1) * (4 wybierz 2) = 180.
Zatem łączna liczba sposobów, aby skończyć na (1,1) wynosi 300.
Przypadek 4: Bot kończy się na (0,0). Aby bot się tutaj znalazł, mógł mieć:
3 ruchy w prawo i 3 ruchy w lewo. W takim przypadku liczba sposobów zmiany kolejności liter w sekwencji RRRLLL wynosi (6 wybierz 3) = 20.
3 ruchy w górę i 3 ruchy w dół. W takim przypadku liczba sposobów zmiany kolejności liter w sekwencji UUUDDD wynosi (6 wybierz 3) = 20.
1 ruch w prawo, 1 ruch w lewo, 2 ruchy w górę i 2 ruchy w dół. W takim przypadku liczba sposobów zmiany kolejności liter w sekwencji RLUUDD wynosi (6 wybierz 1) * (5 wybierz 1) * (4 wybierz 2) = 180.
1 ruch w górę, 1 ruch w dół, 2 ruchy w prawo i 2 ruchy w lewo. W takim przypadku liczba sposobów zmiany kolejności liter w sekwencji RRLLUD wynosi (6 wybierz 1) * (5 wybierz 1) * (4 wybierz 2) = 180.
Zatem łączna liczba sposobów, aby skończyć na (0,0) wynosi 400.
Łącząc te przypadki razem, otrzymujemy całkowitą liczbę sposobów, aby skończyć na | y | = | x | wynosi 4 (20 + 120 + 300) + 400 = 2160. Zatem nasze prawdopodobieństwo wynosi 2160/4096. Gdy ta frakcja zostanie w pełni zmniejszona, wynosi 135/256, więc nasza odpowiedź to 135 .