Berechnen Sie anhand der Größe des Schachbretts und der Ausgangsposition des Ritters die Wahrscheinlichkeit, dass k
sich der Ritter nach Zügen innerhalb des Schachbretts befindet.
Hinweis:
Der Ritter macht alle 8 möglichen Züge mit gleicher Wahrscheinlichkeit.
Sobald sich der Ritter außerhalb des Schachbretts befindet, kann er nicht mehr hinein kommen.
Eingang
Eingaben werden in folgender Form durch Kommas getrennt:
l,k,x,y
Wo l
ist die Länge und Breite des Schachbretts, k
ist die Anzahl der Züge, die der Ritter machen wird, x
ist die x-Position der Ausgangsposition des Ritters und y
ist die y-Position der Ausgangsposition des Ritters. Beachten Sie, dass dies 0,0
die untere linke Ecke der Tafel und l-1,l-1
die obere rechte Ecke der Tafel ist.
Algorithmus:
Beginnen Sie mit den Anfangskoordinaten des Ritters. Machen Sie alle möglichen Züge für diese Position und multiplizieren Sie diese Züge mit ihrer Wahrscheinlichkeit. Rufen Sie die Funktion für jeden Zug rekursiv auf und setzen Sie diesen Vorgang fort, bis die Abbruchbedingung erfüllt ist. Die Abbruchbedingung ist, wenn sich der Springer außerhalb des Schachbretts befindet, in diesem Fall 0 zurückgeben, oder die gewünschte Anzahl von Zügen erschöpft ist, in diesem Fall 1 zurückgeben.
Wie wir sehen können, hängt der aktuelle Status der Rekursion nur von den aktuellen Koordinaten und der Anzahl der bisher ausgeführten Schritte ab. Daher können wir uns diese Informationen in tabellarischer Form merken.
Anerkennung
Diese Challenge stammt ursprünglich aus einem Blog- Eintrag von crazyforcode.com, der unter der CC BY-NC-ND 2.5 IN- Lizenz veröffentlicht wurde. Es wurde leicht modifiziert, um es etwas herausfordernder zu machen.
Antworten:
Pyth, 38 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
Rubin 134
Probieren Sie es online aus: http://ideone.com/ZIjOmP
Der äquivalente Code ohne Golf:
quelle
Haskell - 235
Implementiert eine Funktion
f
mit Parameternl k x y
quelle
Matlab,
124,119Implementiert genau den beschriebenen Algorithmus.
Ich konnte es mit Hilfe von @sanchises um 5 Bytes kürzen, danke!
Erweitert:
Alte Version
quelle
s
Wird von MATLAB initialisierts(l,l)=0
. Schade, dass MATLAB kein Fibonnaci als integrierte Funktion hat, das wäre eine großartige Optimierung fürm
.m
durch eine Matrixzerlegung einen kürzeren Weg zu finden ...m+m'+fliplr(m+m')
Scheint eine Zunahme des bytecount zu sein, und so sind alle meine anderen Wahlen.Mathematica - 137
Verwendung:
Ausgabe:
quelle
MATLAB - 106
Verbessert die @ flawr-Lösung durch mehr MATLAB-y.
Erweitert:
quelle
> <> - 620 (ohne Leerzeichen)
Der Anfangsstapel sollte sein
l,k,x,y
Probieren Sie es aus
quelle