Zadanie
Biorąc pod uwagę schemat pętli ASCII
na przykład
....................
......@@@@@.........
......@...@.........
.....@@...@@@@@.....
....@@........@.....
....@........@@.....
....@@@@@@@@@@......
....................
....................
I miejsce na pętli
na przykład
(7,1)
Musisz znaleźć wnętrze i na zewnątrz pętli
na przykład
00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000
Dane techniczne
Możesz wziąć dane wejściowe do diagramu jako ciąg oddzielony znakami nowej linii lub oczywistym odpowiednikiem
Otrzymasz współrzędne w pętli (0 lub 1 indeksowane) jako część swojego wpisu. Możesz umieścić swoje pochodzenie w dowolnym miejscu. Możesz wziąć ten współrzędnych
(<row>, <column>)
,(<column>, <row>)
albo jako położenie liniowego na sznurku. Możesz otrzymywać te dane dowolną rozsądną metodą. Wszystkie znaki w pętli będą takie same jak znaki w tym indeksie.Preferowanym wyjściem jest dwuwymiarowa tablica wartości prawdy i fałszu, jednak akceptowane są ciągi znaków
1
i0
oddzielone znakami nowej linii lub dowolnego oczywistego odpowiednika dwóch ostatnich . Wewnętrzne i zewnętrzne muszą mieć różne wartości prawdy, ale nie ma znaczenia, który jest który.Pętla jest zdefiniowana jako grupa znaków, tak że wszystkie są tym samym znakiem ( np.
@
) I tak, że każdy znak w pętli ma ścieżkę do oryginalnego znaku (znak na współrzędnej wejściowej), który przechodzi tylko przez ten sam charakter (geometria Taxicab Brak przekątnych ).Wewnątrz znajduje się cała pętla i miejsca, które nie mogą dotrzeć do krawędzi schematu bez przekroczenia pętli.
Na zewnątrz jest wszędzie
To jest golf golfowy
[['.', '.'],['.', '@']]
zamiast łańcucha z nowymi liniami?Odpowiedzi:
MATLAB,
163 159 14678 bajtówDzięki @ rahnema1 za -66 bajtów !!!
Teraz działa na Wypróbuj online! ALE potrzebnych było kilka korekt, ponieważ MATLAB i Octave nie są w pełni kompatybilne.
Wyjaśnienie
Najpierw tworzymy obraz binarny, który po prostu maskuje wszystkie znaki równe początkowemu znakowi. Następnie określamy podłączony komponent, w którym znajduje się początkowy znak.
Następnie tworzymy obraz tego podłączonego komponentu i stosujemy wypełnienie wszystkich „otworów” w obrazie.
źródło
MATLAB: 67 bajtów
Kilka zastrzeżeń:
A
zakłada się, że jest tablicą znaków.output = f(A,2,8)
).bwlabel
iimfill
są częścią zestawu narzędzi do przetwarzania obrazu.źródło