Wenn Sie ein Labyrinth auf stdin und einen Einstiegspunkt haben, schreiben Sie ein Programm, das einen Pfad zum Ausgang auf stdout ausgibt. Jeder Pfad ist akzeptabel, solange Ihr Programm nicht den trivialen Pfad (der durch jeden Punkt im Labyrinth verläuft) für jedes Labyrinth generiert.
In der Eingabe sind Wände mit einem #
und der Einstiegspunkt mit einem gekennzeichnet @
. Sie können beliebige Zeichen verwenden, um das Labyrinth und den Pfad in der Ausgabe zu zeichnen, sofern sie alle unterschiedlich sind.
Sie können davon ausgehen, dass:
- Die Eintritts- und Austrittspunkte befinden sich an den Rändern der Eingabe
- Jede Zeile der Eingabe hat die gleiche Länge
- Das Labyrinth ist lösbar und hat keine Zyklen
- Es gibt nur einen Austrittspunkt
Kürzeste Lösung nach (Unicode) Zeichenzahl gewinnt.
Beispiele
(Beachten Sie, dass die Eingaben mit Leerzeichen aufgefüllt sind)
####
# #
@ #####
# #
#
#######
####
# #
@*#####
#* #
#******
#######
### ###################
### # #
## ######### # #
# ##### #
############### #@##
###*###################
###*********#*********#
## *#########* # *#
# *********** #####**#
############### #@##
code-golf
path-finding
maze
Lowjacker
quelle
quelle
Antworten:
Ruby 1.9, 244 Zeichen
Ausgabe für die beiden Beispiele:
Bearbeitungen:
quelle
ANSI C (
384373368 Zeichen)Hier ist mein C-Versuch. Kompiliert und ausgeführt unter Mac OS X.
Beispielausgabe für einige Tests:
Einschränkungen: Funktioniert nur für Labyrinthe mit bis zu 1000 Zeichen, kann jedoch leicht erhöht werden. Ich habe nur eine beliebige Nummer gewählt, anstatt mich um malloc / remalloc zu kümmern.
Außerdem ist dies der Code mit den meisten Warnungen, den ich jemals geschrieben habe. 19 Warnungen, obwohl es mit der Hervorhebung des XCode-Codes noch mehr aussieht. : D
BEARBEITUNGEN: Bearbeitet und getestet, um int von main zu entfernen und ~ anstelle von! = EOF und putchar anstelle von printf zu verwenden. Danke für die Kommentare!
quelle
int
" vormain
und speichern Sie 4 Zeichen. Verwenden Sieputchar(*(s-1))
stattdessen auchprintf("%c",*(s-1))
, um weitere 4 zu speichern.0xA
nach10
und!=
nach ersetzen^
.~
Operator verwenden, um nach EOF zuwhile(~(c=getchar())
Python, 339 Zeichen
Erzeugt einen kürzesten Weg durch das Labyrinth.
Ausgabe zum Beispiel Labyrinthe:
quelle
Python -
510421 Zeichenquelle
*
unten rechts eine Meldung zum ersten Testfall (Python 2.6.1). Irgendwelche Gedanken?print b,r
und das herauszunehmenprint (i,j)
, von denen ichPython 3 , 275 Bytes
Probieren Sie es online!
Port meiner Antwort auf die Suche nach der kürzesten Route auf einer ASCII-Straße .
Verwendet
'#'
für Anfang,'*'
Ende,'@'
Wand und' '
leeren Raum. In diesem Fallq
ist die Funktion eine Hilfsfunktion, die ein eindimensionales Array mit dem kürzesten Pfad im Labyrinth zurückgibt. Die Funktionf
kann um 4 Bytes gekürzt werden, indem die Variable nicht zugewiesen wirds
. Dies ist unglaublich ineffizient und führt wahrscheinlich zu einer Zeitüberschreitung, da die Wegfindungsfunktion für jeden Charakter im Labyrinth aufgerufen wird.quelle