Lasse eine Schlange jedes Labyrinth füllen (bis es stecken bleibt).
Die Schlange
Die Schlange startet an einem bestimmten Startpunkt und zeigt nach Osten . Er bewegt sich durch immer eine Wand oder einen Teil seines Körpers unmittelbar an die mit LEFT seines Kopfes ( „ linke Regel Wand Folger “), bis er stecken bleibt , da alle vier Richtungen um den Kopf besetzt sind. (Hinweis: Eine feststeckende Schlange kann möglicherweise nicht den gesamten erreichbaren Raum ausfüllen, aber das ist nicht das Ziel!)
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die ein Labyrinth als Eingabe in Form eines 2D-Textes akzeptiert:
- Die Eingabe kann in jedem vernünftigen Format erfolgen: z. B. eine Liste von Zeichenfolgen, eine einzelne Zeichenfolge mit Zeilenumbrüchen, eine Datei.
- Das Labyrinth hat Wände ("
#
"), leere Räume ("") und genau einen Startpunkt ("
o
"). Sie können wählen, um
- entweder nehmen Sie an, dass die erste und letzte Reihe und Spalte vollständig Wände sind;
- oder nehmen Sie an, dass jede Eingabe eine implizite äußere Wandschicht aufweist
Sie können davon ausgehen, dass sich direkt über dem Startpunkt eine Wand (oder eine implizite Wand) befindet (NORTH) und dass die Schlange eine gültige Startbewegung in Richtung OST oder SÜD ausführen kann.
- Sie können davon ausgehen, dass der Text keine anderen Zeichen enthält (außer Zeilenumbrüche, wenn Ihre Eingabe diese benötigt).
- Sie können davon ausgehen, dass alle Zeilen gleich lang sind.
und druckt / gibt ein "gefülltes Labyrinth" als Ausgabe zurück, mit einem Schnappschuss der Schlange in dem Moment, in dem sie stecken blieb :
- Der Körper der Schlange wird durch die Zeichen dargestellt,
>v<^
die auf das nächste Segment zeigen - Der Startpunkt der Schlange ist entweder ihre Richtung am Start ("
>
", es sei denn, sie musste sich sofort umdrehen) oder eino
Charakter (keine Notwendigkeit, konsistent zu sein). - Der Endpunkt der Schlange ist ein
o
Charakter
Wertung
Üblicher Code Golf: Der kürzeste Code gewinnt
Beispiel
in:
#################################
# o #
# #
# ## ### ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ### ## #
# ## ##### ## #
# ## ##### ## #
# ## ### ## #
# ## ## #
# #
# #
#################################
out:
#################################
#>>>>>>>>>>>>>>>>>>>v>>>>>>>>>>v#
#^>>>>>>>>>>>>>>>>>v>>>>>>>>>>vv#
#^^ ##>>>>>>v###o>>>>>v## vv#
#^^ ##>^ ##>>>>^## >v## vv#
#^^ ##^ ## ## v## vv#
#^^ ##^ ## ## v## vv#
#^^ ##>^ ## ## >v## vv#
#^^ ##^< ### v<## vv#
#^^ ##^ ##### v## vv#
#^^ ##^ ##### v## vv#
#^^ ##^< ### v<## vv#
#^^ ##^<<<<<<<<<<<<<<<<## vv#
#^^<<<<<<<<<<<<<<<<<<<<<<<<<<<<v#
#^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#
#################################
Animiert (zur Veranschaulichung):
Bearbeiten: Beachten Sie, dass die Schlange im Zweifelsfall "die linke Hand" an der Wand halten sollte, an der sie sich bereits befindet. Folgen Sie dabei den Ecken und springen Sie nicht zu einer 1 Block entfernten Wand.
Vielen Dank an Jonathan Allan, der das Thema angesprochen hat, und an Draco18s für den erklärenden Schnappschuss oben.
Andere Beispiele
in:
####################
# o# #
# ###
# #
# ## #
# ###
####################
out:
####################
#>>>>>>>>>>>>>>vv# #
#^>>>>>>>>>>>>vvv###
#^^ v<<<o<<<<v>>v#
#^^<<<<##^<<<<<<v<<#
#^<<<<<<<<<<<<<<<###
####################
in:
####################
# o #####
# #####
# #
# ##
####################
out:
####################
# >>>>v#####
# v#####
# >>>>o#
# ##
####################
in:
################
#o #
# ########## #
# # # #
# # # #
# # # #
# # # # #
# # # #
# # # #
# # # #
# ############ #
# #
################
out:
################
#>>>>>>>>>>>>>v#
#>>v##########v#
#^#>>>>>>>>>v#v#
#^#>>>>>>>>vv#v#
#^#^>>>>>>vvv#v#
#^#^^# vvv#v#
#^#^^o<<<<<vv#v#
#^#^^<<<<<<<v#v#
#^#^<<<<<<<<<#v#
#^############v#
#^<<<<<<<<<<<<<#
################