Wie der Titel vermuten lässt, ist dieses Problem teilweise vom höflichen, kurzsichtigen, betrunkenen Bot von @NP inspiriert
Unser armer Bot wird am Ursprung auf ein kartesisches Gitter gelegt und bewegt nach jeder Minute 1 Einheit in eine von vier Richtungen (Auf, Ab, Links, Rechts).
Nach n Minuten werden alle latenten Minen auf dem Gitter aktiviert und töten jeden armen Bot, der sich über ihnen befindet. Die Minen befinden sich an allen ganzzahligen Koordinaten, die der Gleichung | y | = | x | entsprechen.
Herausforderung
Sie erhalten n , die Anzahl der Minuten, bevor die Minen explodieren, als Eingabe und als Ausgabe müssen Sie die Wahrscheinlichkeit ermitteln, dass der Bot tot ist .
Eingabe : Eine natürliche Zahl, die n darstellt .
Ausgabe : Die Wahrscheinlichkeit, dass der Bot tot ist, sei p / q, wobei p und q relativ ganze Primzahlen sind (q kann nicht 0 sein, aber p kann). Ausgabe p.
Regeln
- Ihr Algorithmus darf nicht in exponentieller oder höherer Zeit ausgeführt werden. Es sollte idealerweise in Polynomzeit oder weniger laufen.
- Ihr Algorithmus muss in der Lage sein, Eingaben von
n
<20 (kann angepasst werden, wenn zu hart eingestellt wird) in angemessener Zeit zu verarbeiten. - Dies ist eine Code-Golf- Herausforderung.
- Das Durchlaufen aller Möglichkeiten für ein gegebenes n wird definitiv nicht als Antwort akzeptiert.
Testfälle
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
Beispielberechnung für n = 6
Wir haben 4 mögliche Züge: U, D, R und L. Die Gesamtzahl der Pfade, die genommen werden könnten, beträgt 4 ^ 6 oder 4096. Es gibt 4 mögliche Fälle, die entlang der Linie y = x: x, y = landen ± 1; x, y = ± 2; x, y = ± 3; oder x = y = 0. Wir werden die Anzahl der Wege zählen, um zu (1,1), (2,2) und (3,3) zu gelangen, sie mit 4 multiplizieren, um die anderen Quadranten zu berücksichtigen, und addieren dies auf die Anzahl der Möglichkeiten, um bei (0,0) zu enden.
Fall 1: Der Bot endet bei (3, 3). Damit der Bot hier landen kann, muss er 3 richtige Züge und 3 Züge nach oben gehabt haben. Mit anderen Worten, die Gesamtzahl der Wege, um hierher zu gelangen, ist der Weg, um die Buchstaben in der Sequenz RRRUUU neu anzuordnen, die 6 ist. Wählen Sie 3 = 20.
Fall 2: Der Bot endet bei (2,2). Damit der Bot hier landen kann, hätte er 2 Aufwärtszüge, 3 Rechtszüge und 1 Linkszug haben können. oder 2 Rechtsbewegungen, 3 Aufwärtsbewegungen und 1 Abwärtsbewegung. Die Gesamtzahl der Wege, um hierher zu gelangen, ist also die Summe der Wege, um die Buchstaben in den Sequenzen RRRLUU und UUUDRR neu anzuordnen, die beide (6 wählen 1) * (5 wählen 2) = 60 sind, was insgesamt 120 Möglichkeiten ergibt .
Fall 3: Der Bot endet bei (1,1). Damit der Bot hier landen kann, hätte er Folgendes haben können: 1 Rechtsbewegung, 3 Aufwärtsbewegung und 2 Abwärtsbewegung. In diesem Fall beträgt die Anzahl der Möglichkeiten zum Neuanordnen der Buchstaben in der Sequenz RUUUDD (6 wählen 1) * (5 wählen 2) = 60.
1 Zug nach oben, 3 nach rechts und 2 nach links. In diesem Fall beträgt die Anzahl der Möglichkeiten zum Neuanordnen der Buchstaben in der Sequenz URRRLL (6 wählen 1) * (5 wählen 2) = 60.
2 Rechtsbewegungen, 1 Linksbewegung, 2 Aufwärtsbewegungen und 1 Abwärtsbewegung. In diesem Fall beträgt die Anzahl der Möglichkeiten zum Neuanordnen der Buchstaben in der Sequenz UUDRRL (6 wählen 1) * (5 wählen 1) * (4 wählen 2) = 180.
Somit beträgt die Gesamtzahl der Wege, um bei (1,1) zu enden, 300.
Fall 4: Der Bot endet bei (0,0). Damit der Bot hier landen konnte, hätte er Folgendes haben können:
3 Rechtsbewegungen und 3 Linksbewegungen. In diesem Fall beträgt die Anzahl der Möglichkeiten zum Neuanordnen der Buchstaben in der Sequenz RRRLLL (6 wählen 3) = 20.
3 Aufwärtsbewegungen und 3 Abwärtsbewegungen. In diesem Fall beträgt die Anzahl der Möglichkeiten zum Neuanordnen der Buchstaben in der Sequenz UUUDDD (6, Auswahl 3) = 20.
1 Rechtsbewegung, 1 Linksbewegung, 2 Aufwärtsbewegungen und 2 Abwärtsbewegungen. In diesem Fall beträgt die Anzahl der Möglichkeiten zum Neuanordnen der Buchstaben in der Sequenz RLUUDD (6 wählen 1) * (5 wählen 1) * (4 wählen 2) = 180.
1 Aufwärtsbewegung, 1 Abwärtsbewegung, 2 Rechtsbewegungen und 2 Linksbewegungen. In diesem Fall beträgt die Anzahl der Möglichkeiten zum Neuanordnen der Buchstaben in der Sequenz RRLLUD (6 wählen 1) * (5 wählen 1) * (4 wählen 2) = 180.
Somit beträgt die Gesamtzahl der Möglichkeiten, bei (0,0) zu landen, 400.
Wenn wir diese Fälle addieren, erhalten wir die Gesamtzahl der Möglichkeiten, auf | y | zu landen = | x | ist 4 (20 + 120 + 300) + 400 = 2160. Somit ist unsere Wahrscheinlichkeit 2160/4096. Wenn dieser Bruchteil vollständig reduziert ist, ist er 135/256, also lautet unsere Antwort 135 .