Aufgabe
Gegeben ein ASCII-Diagramm einer Schleife
z.B
....................
......@@@@@.........
......@...@.........
.....@@...@@@@@.....
....@@........@.....
....@........@@.....
....@@@@@@@@@@......
....................
....................
Und ein Ort auf der Schleife
z.B
(7,1)
Sie müssen das Innere und Äußere der Schleife finden
z.B
00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000
Spezifikationen
Sie können Eingaben für das Diagramm als durch Zeilenumbrüche oder offensichtliche Entsprechungen getrennte Zeichenfolge vornehmen
Sie erhalten eine Koordinate in der Schleife (0 oder 1 indiziert) als Teil Ihrer Eingabe. Sie können Ihren Ursprung an einem beliebigen Ort platzieren. Sie können nehmen diese Koordinate in
(<row>, <column>)
,(<column>, <row>)
oder als die lineare Position auf der Saite. Sie können diese Daten auf jede angemessene Weise erhalten. Alle Zeichen in der Schleife stimmen mit dem Zeichen an diesem Index überein.Bevorzugte Ausgabe ist eine zweidimensionale Anordnung von Wahrheits- und Falschwerten, jedoch werden Zeichenfolgen von
1
und0
getrennt durch Zeilenumbrüche oder ein offensichtliches Äquivalent der beiden letzteren akzeptiert. Das Innere und das Äußere müssen unterschiedliche Wahrheitswerte haben, aber es spielt keine Rolle, welches welches ist.Eine Schleife wird als eine Gruppe von Zeichen definiert, sodass alle Zeichen dasselbe Zeichen sind ( z. B.
@
) und dass jedes Zeichen in der Schleife einen Pfad zum ursprünglichen Zeichen (das Zeichen an der Eingabekoordinate) hat, das nur dasselbe durchläuft Zeichen (Taxigeometrie Keine Diagonalen ).Das Innere ist die gesamte Schleife selbst und die Stellen, die den Rand des Diagramms nicht erreichen können, ohne die Schleife zu überqueren.
Das Äußere ist überall anders
Das ist Code-Golf
[['.', '.'],['.', '@']]
anstelle einer Zeichenfolge mit Zeilenumbrüchen?Antworten:
MATLAB,
163 159 14678 BytesDanke @ rahnema1 für -66 Bytes !!!
Jetzt funktioniert es auf Online testen! ABER einige Anpassungen waren erforderlich, da MATLAB und Octave nicht vollständig kompatibel sind.
Erläuterung
Zuerst erstellen wir ein Binärbild, das nur alle Zeichen maskiert, die dem Anfangszeichen entsprechen. Dann bestimmen wir die verbundene Komponente, in der sich das Anfangszeichen befindet.
Danach erstellen wir ein Bild dieser verbundenen Komponente und füllen alle "Löcher" im Bild.
quelle
MATLAB: 67 Bytes
Ein paar Vorsichtsmaßnahmen:
A
wird angenommen, dass es sich um ein Zeichenarray handelt.output = f(A,2,8)
).bwlabel
undimfill
sind Teil der Image Processing Toolbox.quelle