Ihr Ziel ist es, ein Programm zu schreiben, das eine zufällige 10x10-Karte mit 0
, 1
und erstellt 2
und den kürzesten Pfad von links oben nach rechts unten findet, vorausgesetzt, dass:
0 steht für eine Rasenfläche: jeder kann darauf laufen;
1 stellt eine Mauer dar: man kann sie nicht überqueren;
2 steht für ein Portal: Wenn Sie ein Portal betreten, können Sie zu einem beliebigen anderen Portal in der Karte wechseln.
Technische Daten:
- Das Element oben links und das Element unten rechts müssen 0 sein .
- Bei der Erstellung der Zufallskarte sollte jedes Feld eine 60% ige Chance haben, eine 0 , 30% eine 1 und 10% eine 2 zu sein .
- Sie können sich in ein beliebiges benachbartes Feld bewegen (auch diagonale).
- Ihr Programm sollte die Karte und die Anzahl der Schritte des kürzesten Pfades ausgeben.
- Wenn es keinen gültigen Pfad gibt, der zum Feld unten rechts führt, sollte Ihr Programm nur die Karte ausgeben.
- Sie können jede Ressource verwenden, die Sie möchten.
- Kürzester Code gewinnt.
Berechnen von Schritten:
Ein Schritt ist eine tatsächliche Bewegung; Jedes Mal, wenn Sie das Feld ändern, erhöhen Sie den Zähler.
Ausgabe:
0000100200
0100100010
1000000111
0002001000
1111100020
0001111111
0001001000
0020001111
1100110000
0000020100
9
code-golf
path-finding
maze
Vereos
quelle
quelle
Antworten:
GolfScript, 182 Zeichen
Beispiele:
quelle
Mathematica (344)
Bonus: Hervorhebung des Pfades
Ich erstelle den Graphen aller möglichen Filme zu Nachbarspitzen und füge alle möglichen "Teleports" hinzu.
quelle
Mathematica,
208202 ZeichenBasis sind die Lösungen von David Carraher und ybeltukov. Und dank des Vorschlags von ybeltukov.
quelle
n/n
stattn/10
:)〚 〛
für Klammern (es ist richtig Unicode-Symbole)Norm[# - #2] & @@ # < 2 || # \[Union] u == u &
Norm[# - #2] & @@ # < 2
bedeutet, dass der Abstand zwischen zwei Punkten weniger als 2 beträgt, sie müssen also benachbart sein.# ⋃ u == u
bedeutet beide Punkte sind in u.Python 3, 279
Einige Dijkstra-Varianten. Hässlich, aber so viel Golf gespielt wie ich konnte ...
Probelauf
quelle
Mathematica
316 279275Das Basisobjekt ist ein 10 × 10-Array mit ungefähr 60 0, 30 1 und 10 2. Das Array wird verwendet, um eine 10x10 zu ändern
GridGraph
, wobei alle Kanten verbunden sind. Die Knoten, die den Zellen entsprechen, die 1 im Array enthalten, werden aus dem Diagramm entfernt. Diese Knoten, die "2en halten", sind alle miteinander verbunden. Dann wird der kürzeste Pfad zwischen Scheitelpunkt 1 und Scheitelpunkt 100 gesucht. Wenn ein solcher Pfad nicht existiert, wird die Karte zurückgegeben; Wenn ein solcher Pfad existiert, werden die Karte und die kürzeste Pfadlänge angezeigt.Probelauf :
quelle
Python (1923)
Backtracking-SucheZugegeben, nicht die kürzeste oder effizienteste, obwohl es einige Memoization gibt.
quelle
JavaScript (541)
Die Diagrammgenerierung erfolgt in den ersten fünf Zeilen.
f
enthält die Felder,p
hält die Portale. Die eigentliche Suche erfolgt über BFS.Beispielausgabe:
quelle
Python 3 (695)
Dijkstra!
Beispielausgabe:
quelle
Python, 314
Es ist eine widerliche Implementierung von Bellman-Ford. Dieser Algorithmus ist O (n ^ 6)! (Welches ist in Ordnung für n = 10)
quelle
print '\n'.join(map(str,a))
; Ich habe esprint a
aus Gründen des Golfsports getan .r*10
hat 100 Elemente).