Eine Ritterfüllung ist eine Überflutungsfüllung, die die Konnektivität der Ritterschachfigur verwendet. Speziell:
1 1
1 1
0
1 1
1 1
(0 ist der Anfangspunkt, 1s zeigt die verbundenen Zellen)
Herausforderung
Führen Sie bei einem 2D-Raster aus Räumen und Wänden und einer anfänglichen Position eine Ritterfüllung auf dem Raster durch. Kürzester Code gewinnt.
Regeln
Sie können Eingaben und Ausgaben in jedem beliebigen Format (Bild, Zeichenfolge, Array, was auch immer) erstellen. Sie können die ursprüngliche Position als Teil des Eingaberasters oder als separate Koordinate verwenden. Für diese Erklärung wird das folgende Format verwendet:
######## # = wall ######## x = initial location ## x ## ## ## ######## ## ## ######## ########
Die Ausgabe ist eine Kopie des Eingaberasters mit dem hinzugefügten Ritterfüllungsergebnis
Ihre Füllung darf nicht dieselbe "Farbe" wie der Raum oder die Wände haben, sondern kann dieselbe sein wie die ursprüngliche Ortsmarkierung. In dem obigen Bild wäre eine gültige Ausgabe beispielsweise:
######## # = wall ######## @ = fill (could also have been x) ## @ @## ## @ @## ######## ##@ @ ## ######## ########
Sie können davon ausgehen, dass das Eingabegitter immer eine 2-Zellen-Wand auf allen Seiten enthält
- Sie können davon ausgehen, dass sich der ursprüngliche Standort niemals innerhalb einer Wand befindet
- Sie können davon ausgehen, dass das Raster niemals größer als 1000x1000 ist
- Builtins sind in Ordnung
- Kürzester Code (in Bytes) gewinnt
Testfälle
#
Bezeichnet in allen Testfällen eine Wand, bezeichnet einen leeren Raum und
x
bezeichnet den anfänglichen Ort der Füllung. @
bezeichnet die Ausgabefüllung.
Input 1:
########
########
## x ##
## ##
########
## ##
########
########
Output 1:
########
########
## @ @##
## @ @##
########
##@ @ ##
########
########
Input 2:
############
############
## ## x##
## ## ##
##### ##
## ##
############
############
Output 2:
############
############
## ##@@@@@##
##@##@@@@@##
#####@@@@@##
## @@@@@@@##
############
############
Input 3:
####################
####################
## ## ##
## ## ##
## ## ######## ##
## ## ######## ##
## ## ## ## ##
## ## ## ## ##
## ## ## ## ##
## ## ## ## ##
## ## ######## ##
## ## ######## ##
## ## ## ##
## ## x## ##
## ############ ##
## ############ ##
## ##
## ##
####################
####################
Output 3:
####################
####################
##@@##@@@@@@@@@@@@##
##@@##@@@@@@@@@@@@##
##@@##@@########@@##
##@@##@@########@@##
##@@##@@## ##@@##
##@@##@@## ##@@##
##@@##@@## ##@@##
##@@##@@## ##@@##
##@@##@@########@@##
##@@##@@########@@##
##@@##@@@@@@@@##@@##
##@@##@@@@@@@@##@@##
##@@############@@##
##@@############@@##
##@@@@@@@@@@@@@@@@##
##@@@@@@@@@@@@@@@@##
####################
####################
Input 4:
################
################
## ###
## x ###
## ####### ###
## ####### ###
## ## ## ###
## ## ## ###
## ## ## ###
## ######## ##
## ######## ##
## ## ##
## ## ##
################
################
Output 4:
################
################
## @ @ ###
## @ @ @ ###
## ####### ###
##@ ####### @###
## ## ## ###
## @## ##@ ###
## ## ## ###
##@ ########@ ##
## ######## ##
## @ @ ## @##
## @ @## ##
################
################
Input 5:
##############
##############
## ###
## ###
## ###
## ### ###
## #x# ###
## ### ###
## ###
## ###
## ###
##############
##############
Output 5:
##############
##############
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@###@@@###
##@@@#@#@@@###
##@@@###@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##############
##############
Antworten:
Oktave, 73 Bytes
Online Demo!
* Einige Änderungen wurden angewendet, um in rextester ausgeführt zu werden.
Eine Funktion, die ein 2d-Array von 0 & 2 als Wand und ein Array von 0 & 1 als Anfangsposition verwendet und ein Array von 0 & 1 & 2 ausgibt.
quelle
pkg load ...
außerhalb des Test-Frameworks ausgeführt werden? Wennimdilate
&de2bi
ohne expliziten Import verfügbar ist, ist das in Ordnung.-auto
entfernt wurde, ist dies kein Problem, und ich vermute, dass diese Antwort keine neuen Funktionen verwendet.JavaScript (ES6), 116 Byte
Basierend auf meiner Antwort auf Fehlerhafte Schlösser erkennen . Füllt mit
x
s.quelle
Python 3 ,
394 387 381 356 352 347 319 313 154139 Bytesexcept:0
try: except
Block und mehrere andere Golf losgewordeng[(a,b)]
als geradeg[a,b]
Probieren Sie es online!
quelle
except:pass
stattdessen tunexcept:0
Mathematica, 117 Bytes
Die übliche Geschichte: Leistungsstarke Einbauten, aber lange Namen…
Probieren Sie es am Wolfram Sandkasten!
Es werden zwei Eingaben benötigt: Zuerst wird das Eingaberaster als Array von
0
s (für die Wände) und1
s (für Leerzeichen), dann eine einzelne Ganzzahl für die Startposition, die durch Nummerieren des Rasters entlang der Zeilen von oben nach unten ermittelt wird, zSie können die Funktion wie folgt aufrufen
HighlightGraph[...~Prepend~h]&[{{0,0,...,0}, {0,0,...,0}, ..., {0,0,...,0}}, 20]
.Die
KnightTourGraph
Funktion erstellt einen Graphen mit Scheitelpunkten, die Positionen im Gitter entsprechen, und Kanten, die gültigen Ritterbewegungen entsprechen. Dann nehmen wirSubgraph
die Scheitelpunkte, die keine Wände sind, und ermitteln dieConnectedComponents
Scheitelpunkte des Startscheitelpunkts. Die Ausgabe ist ein Diagramm (um 90 ° gegen den Uhrzeigersinn gedreht), bei dem die nicht an der Wand befindlichen Scheitelpunkte rot und die ausgefüllten Scheitelpunkte gelb hervorgehoben sind. Für den ersten Testfall sieht die Ausgabe beispielsweise folgendermaßen aus:quelle
f=...
f[{0,...,0;0,...,0}, 19]
und ähnlichem sind kläglich gescheitert.HighlightGraph[g,ConnectedComponents[h=Subgraph[g=KnightTourGraph@@Dimensions@#,Flatten@#~Position~1],#2]~Prepend~h]&[{{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,1,1,1,1,0,0},{0,0,1,1,1,1,0,0},{0,0,0,0,0,0,0,0},{0,0,1,1,1,1,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}},20]
(für den ersten Testfall). Ich habe das in der Frage bearbeitet - tut mir leid, dass es von Anfang an nicht da war!