Beschreibung der Herausforderung
Nennen wir ein zweidimensionales, rechteckiges Array (dh jedes Subarray hat die gleiche Länge), ein Raster . Jede Einheit eines Gitters ist entweder ein leerer Raum oder ein Rand . In einem Zeichenraster wird der leere Raum durch ein einzelnes Leerzeichen dargestellt. Jedes andere Zeichen wird als Rahmen behandelt. Beispielgitter ( +
's, |
' s und -
's wurden zur besseren Lesbarkeit hinzugefügt - sie sind nicht Teil des Gitters ):
+----+
| |
| |
| |
| |
| |
+----+ an empty 4x5 grid
+------+
| |
| # |
| # |
+------+ a 6x3 grid with 2 borders
+----------+
| |
| |
| ##### |
| # # |
| ## # <------ enclosed area
| # # |
| ###### |
| |
+----------+ a 10x8 grid with an enclosed area
Füllen Sie bei einem 2D-Raster und einem Koordinatenpaar den umschlossenen Bereich um den durch die Koordinaten dargestellten Punkt.
Beispiel Ein- / Ausgänge
1)
0 0
+----------+ +----------+
| | |XXXXXXXXXX|
| | -> |XXXXXXXXXX|
| | |XXXXXXXXXX|
+----------+ +----------+
2)
6 5
+-----------------+ +-----------------+
| | | |
| | | |
| ######## | | ######## |
| # # | | #XXXXXXX# |
| # #### | | #XXXX#### |
| # # | | #XXXX# |
| # # | -> | #XXXX# |
| # # | | #XXXX# |
| #### | | #### |
| | | |
| | | |
+-----------------+ +-----------------+
3)
4 6
+-----------------+ +-----------------+
| | |XXXXXXXXXXXXXXXXX|
| #### | |XXXX####XXXXXXXXX|
| # # | -> |XXX# #XXXXXXXX|
| #### | |XXXX####XXXXXXXXX|
| | |XXXXXXXXXXXXXXXXX|
+-----------------+ +-----------------+
4)
4 5
+-----------------+ +-----------------+ +-----------------+
| | | | | |
| | | | | |
| #### | | #### | | XXXX |
| #### | -> | #### | or | XXXX |
| #### | | #### | | XXXX |
| | | | | |
+-----------------+ +-----------------+ +-----------------+
5)
2 6
+----------------+ +----------------+
| | |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
| | -> |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
|BBBBBBBBBBBBBBBB| |BBBBBBBBBBBBBBBB|
| | | |
| | | |
+----------------+ +----------------+
Anmerkungen
Ein leeres Gitter wird als eingeschlossen betrachtet, dh die Ränder befinden sich implizit auch entlang der Ränder des Gitters (siehe Beispiele 1. und 5.).
Eine Ecke eines geschlossenen Bereichs muss nicht L-förmig sein. Die folgenden zwei Bereiche sind daher gleichwertig:
#### ##
# # # #
# # == # #
# # # #
#### ##
Wenn eine Einheit unter den Koordinaten zufällig ein Rand ist, können Sie das Raster entweder unverändert lassen (wie in Beispiel 4.) oder es als leeren Raum behandeln.
Sie können ein beliebiges Zeichen für Füll- / Leerzeichen auswählen, solange Sie diese Informationen in die Übermittlung aufnehmen.
Bei Verwendung einen anderen Typ als
char
Ihre Zwecke besser paßt, die Sie verwenden könnenints
(0
für leeren Raum,1
für Grenz) oderbooleans
(true
undfalse
jeweils) oder jede andere Art - nur sicherstellen , dass diese Informationen in Ihrer Vorlage schließen,Die in den obigen Beispielen verwendeten Koordinaten sind 0-indizierte
(row, column)
Koordinaten, da dies für zweidimensionale Arrays bequemer ist. Wenn Sie ein(column, row)
(kartesisches) System und / oder nicht 0-indizierte Koordinaten verwenden möchten , geben Sie dies in Ihrer Einreichung an.Wenn Sie nicht wissen, wo Sie anfangen sollen, lesen Sie den Wikipedia-Artikel über Hochwasserfüllung
Denken Sie daran, dass dies eine Code-Golf- Herausforderung ist. Machen Sie Ihren Code so kurz wie möglich!
quelle
Antworten:
MATLAB,
307 BytesDa wir anstelle von Zeichenfolgen logische Eingaben verwenden können, können wir die Bare-Funktion wie folgt verwenden:
Dies ist eine anonyme Funktion. Für die Verwendung müssen wir einen Namen annehmen, z
f=@
imfill
. Dann können wir bewerten es ebensof(input,point)
, woinput
eine logische Matrix ist, zum Beispiel[0,0;0,1]
, undpoint
ist ein 2D-Vektor mit 1 basierten Koordinaten, zum Beispiel[1,2]
.Alte Version, die an Strings arbeitet:
Diese anonyme Funktion akzeptiert die Eingabe sowie einen Vektor mit den Koordinaten (1-basierter Index). Die Funktion
imfill
macht genau das, was wir brauchen, arbeitet aber nur mit Binärbildern. Deshalb konvertieren wir die Eingabematrix in ein logisches Array (wo#
sind die Grenzen und(Leerzeichen) sind die Leere), führen die Füllung durch und werden dann zurück konvertiert. (wieder
#
ist gefüllt, Raum ist nicht gefüllt).Danke @LuisMendo für -
1Byte.quelle
~=32
durch>32
C 162 Bytes
Nimmt Eingaben von Argumenten (
./floodfill X Y grid
) entgegen. Das Raster muss\n
oder\r\n
zwischen jeder Zeile enthalten, die letzte neue Zeile ist optional. Der einfachste Weg, den ich gefunden habe, um von der Shell aus aufzurufen:Ausgaben an stdout unter Verwendung
!
des Füllzeichens. Wenn die Startposition mit a übereinstimmt#
, ändert sich nichts.Nervenzusammenbruch:
Beachten Sie, dass dies auf dem Ändern der verbotenen Eingabeargumentzeichenfolge beruht, sodass dies möglicherweise nicht auf allen Plattformen funktioniert (implizite Deklarationen machen dies ebenfalls nicht zum Standard).
quelle
int w, l;
einfachw, l;
- gcc defaults es zuint
gebenC -
263247240238 BytesDies ist die
erste,zweite unddritte Version. Ich glaube, Code kann auch verkleinert werden.Und lesbare Version:
Kompilieren und ausführen:
gcc -o flood floodgolf.c && cat 1.txt | ./flood
Ressourcen:
Hinweis: Ich arbeite an
int
Werten. Jedes(32) wird als leerer Raum behandelt. Jeder andere Wert wird als Rand behandelt. Koordinaten sind im Format
(row, column)
quelle
for
(scanf
hier) einfügen. Die Verwendung des ersten Parameters von main als billige int-Deklaration funktioniert in den meisten Compilern. Außerdem können Sie möglicherweise ein wenig sparen, indem Sie Ihr Array reduzieren (sollte sicherlich der Druckschleife helfen)Python 2, 158 Bytes
Probieren Sie es online aus . Einfache rekursive Lösung
0-indiziert in Zeilen-Spalten-Reihenfolge
1 - leerer Raum, 0 - gefüllter Raum
Übernimmt die Eingabe als Array von Arrays mit 1 und 0 sowie zwei Zahlen
quelle
Perl 5 , 129 + 1 (-a) = 130 Bytes
Probieren Sie es online aus!
Wie?
quelle