Opis wyzwania
Nazwijmy dwuwymiarową prostokątną tablicę (co oznacza, że każda podtablica ma tę samą długość), siatkę . Każda jednostka siatki jest pustą przestrzenią lub ramką . W siatce znaków puste miejsce jest reprezentowane przez pojedynczą białą spację; każdy inny znak jest traktowany jak obramowanie. Przykładowe Siatki ( +
„s, |
” s i -
s dodaną”dla czytelności - nie są one częścią sieci ):
+----+
| |
| |
| |
| |
| |
+----+ an empty 4x5 grid
+------+
| |
| # |
| # |
+------+ a 6x3 grid with 2 borders
+----------+
| |
| |
| ##### |
| # # |
| ## # <------ enclosed area
| # # |
| ###### |
| |
+----------+ a 10x8 grid with an enclosed area
Biorąc pod uwagę siatkę 2D i parę współrzędnych, wypełnij zamknięty obszar otaczający punkt reprezentowany przez współrzędne.
Przykładowe wejścia / wyjścia
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|
| | | |
| | | |
+----------------+ +----------------+
Notatki
Pusta siatka jest uważana za zamkniętą, tzn. Granice są również domyślnie umieszczone wzdłuż krawędzi siatki (patrz przykłady 1. i 5.),
Narożnik zamkniętego obszaru nie musi mieć kształtu litery L. Następujące dwa obszary są zatem równoważne:
#### ##
# # # #
# # == # #
# # # #
#### ##
Jeśli jednostka pod współrzędnymi stanie się ramką, możesz pozostawić siatkę bez zmian (jak w przykładzie 4) lub potraktować ją jako puste miejsce,
Możesz wybrać dowolny znak do wypełnienia / pustej przestrzeni, o ile podasz te informacje w formularzu
Jeśli używasz innego typu niż
char
najlepiej pasuje do twoich celów, możesz użyćints
(0
dla pustej przestrzeni,1
dla obramowania) lubbooleans
(true
ifalse
odpowiednio) lub dowolnego innego typu - pamiętaj tylko o umieszczeniu tych informacji w swoim zgłoszeniu,Współrzędne użyte w powyższych przykładach są
(row, column)
współrzędnymi 0-indeksowanymi , ponieważ jest to wygodniejsze w przypadku układu dwuwymiarowego. Jeśli chcesz użyć(column, row)
(kartezjańskiego) układu i / lub współrzędnych nieindeksowanych, podaj go w swoim zgłoszeniu.Jeśli nie wiesz, od czego zacząć, zapoznaj się z artykułem Wikipedii na temat wypełniania powodzi
Pamiętaj, że to jest golf-golf wyzwanie, więc ustaw swój kod tak krótko, jak to możliwe!
źródło
Odpowiedzi:
MATLAB,
307 bajtówPonieważ zamiast ciągów znaków możemy używać logicznych danych wejściowych, możemy używać samej funkcji, ponieważ jest to:
To anonimowa funkcja. W celu użycia musimy przyjąć nazwę, np
f=@
imfill
. Następnie możemy to po prostu ocenić jakof(input,point)
, gdzieinput
, na przykład[0,0;0,1]
,point
jest macierzą logiczną i jest wektorem 2d ze współrzędnymi opartymi na 1, np[1,2]
.Stara wersja działająca na ciągach:
Ta anonimowa funkcja przyjmuje dane wejściowe oraz wektor ze współrzędnymi (indeks oparty na 1). Funkcja
imfill
robi dokładnie to, czego potrzebujemy, ale działa tylko na obrazach binarnych. Dlatego konwertujemy macierz wejściową na tablicę logiczną (gdzie#
są granice, a(spacje) są puste), wykonuje wypełnienie, a następnie jest konwertowane z powrotem. (ponownie
#
jest wypełniony, przestrzeń nie jest wypełniona).Dzięki @LuisMendo za -
1bajt.źródło
~=32
przez>32
C, 162 bajty
Pobiera dane wejściowe z argumentów (
./floodfill X Y grid
). Siatka musi zawierać\n
lub\r\n
pomiędzy każdą linię, końcowa nowa linia jest opcjonalna. Najprostszy sposób na wywołanie z powłoki:Wyprowadza na standardowe wyjście, używając
!
znaku wypełnienia. Jeśli pozycja początkowa pokrywa się z a#
, nie zmienia.Awaria:
Zauważ, że polega to na modyfikacji wejściowego ciągu argumentów, co jest zabronione, więc może nie działać na wszystkich platformach (deklaracje niejawne również powodują, że jest to niestandardowe).
źródło
int w, l;
po prostuw, l;
- domyślnie gcc goint
wpisaćC -
263247240238 bajtówTo jest
pierwszadrugatrzecia wersja, uważam, że kod można również zmniejszyć.I czytelna wersja:
Skompiluj i uruchom:
gcc -o flood floodgolf.c && cat 1.txt | ./flood
Zasoby:
Uwaga: pracuję nad
int
wartościami. Każdy(32) jest traktowany jako puste miejsce. Każda inna wartość jest traktowana jako granica. Współrzędne są w formacie
(row, column)
źródło
for
(scanf
tutaj), a użycie pierwszego parametru main jako taniej deklaracji int będzie działać w większości kompilatorów. Możesz także być w stanie zaoszczędzić trochę, spłaszczając tablicę (powinno to z pewnością pomóc w pętli drukowania)Python 2, 158 bajtów
Wypróbuj online . Proste rozwiązanie rekurencyjne
0-indeksowane w kolejności wiersz-kolumna
1 - puste miejsce, 0 - wypełnione miejsce
Pobiera dane wejściowe jako tablicę tablic 1 i 0 oraz dwie liczby
źródło
Perl 5 , 129 + 1 (-a) = 130 bajtów
Wypróbuj online!
W jaki sposób?
źródło