Wypełnienie rycerza to wypełnienie powodziowe przy użyciu połączenia szachy rycerza. Konkretnie:
1 1
1 1
0
1 1
1 1
(0 to punkt początkowy, 1s pokazuje połączone komórki)
Wyzwanie
Biorąc pod uwagę siatkę 2D przestrzeni i ścian oraz początkową lokalizację, wypełnij siatkę rycerzem. Najkrótszy kod wygrywa.
Zasady
Możesz pobierać dane wejściowe i generować dane wyjściowe w dowolnym formacie (obraz, ciąg, tablica, cokolwiek). Możesz wziąć początkową lokalizację jako część siatki wejściowej lub jako osobną współrzędną. Do celów tego objaśnienia zostanie użyty następujący format:
######## # = wall ######## x = initial location ## x ## ## ## ######## ## ## ######## ########
Wyjście jest kopią siatki wejściowej z dodanym wynikiem wypełnienia rycerza
Wypełnienie nie może być w tym samym „kolorze” co przestrzeń lub ściany, ale może być takie samo jak początkowy znacznik lokalizacji. Na przykład biorąc pod uwagę powyższy obraz, poprawnym wyjściem byłoby:
######## # = wall ######## @ = fill (could also have been x) ## @ @## ## @ @## ######## ##@ @ ## ######## ########
Możesz założyć, że siatka wejściowa zawsze będzie zawierać ścianę 2-komórkową ze wszystkich stron
- Możesz założyć, że początkowa lokalizacja nigdy nie będzie w ścianie
- Możesz założyć, że siatka nigdy nie będzie większa niż 1000 x 1000
- Wbudowane są w porządku
- Najkrótszy kod (w bajtach) wygrywa
Przypadki testowe
We wszystkich przypadkach testowych #
oznacza ścianę, oznacza pustą przestrzeń i
x
wskazuje początkową lokalizację wypełnienia. @
oznacza wypełnienie wyjściowe.
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:
##############
##############
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@###@@@###
##@@@#@#@@@###
##@@@###@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##############
##############
Odpowiedzi:
Oktawa, 73 bajty
Demo online!
* Niektóre zmiany zastosowane do uruchomienia w rextesterze.
Funkcja, która przyjmuje tablicę 2d 0 i 2 jako ścianę oraz tablicę 0 i 1 jako lokalizację początkową i generuje tablicę 0 i 1 i 2.
źródło
pkg load ...
gdy jest uruchamiany poza środowiskiem testowym? Jeśliimdilate
&de2bi
są dostępne bez wyraźnego importu, to w porządku.-auto
została wcześniej usunięta, nie ma problemu, i przypuszczam, że ta odpowiedź nie używa żadnych nowych funkcji.JavaScript (ES6), 116 bajtów
Na podstawie mojej odpowiedzi na Wykrywanie nieudanych zamków . Wypełnia za pomocą
x
s.źródło
Python 3 ,
394 387 381 356 352 347 319 313 154139 bajtówexcept:0
try: except
bloku i kilku innych golfówg[(a,b)]
jak tylkog[a,b]
Wypróbuj online!
źródło
except:pass
zamiast tego zrobić ?except:0
Mathematica, 117 bajtów
Zwykła historia: potężne wbudowane, ale długie nazwy…
Wypróbuj w piaskownicy Wolfram!
Wymaga dwóch danych wejściowych: najpierw jest siatka wejściowa jako tablica
0
s (dla ścian) i1
s (dla spacji), a następnie pojedyncza liczba całkowita dla pozycji początkowej, znaleziona przez numerację siatki wzdłuż rzędów od góry do dołu, np.Możesz wywołać funkcję jak
HighlightGraph[...~Prepend~h]&[{{0,0,...,0}, {0,0,...,0}, ..., {0,0,...,0}}, 20]
.KnightTourGraph
Funkcji tworzy się wykres z wierzchołkami odpowiadającej pozycji w siatce i krawędzie odpowiadające ważnych ruchów Knight, potem podjąćSubgraph
wierzchołków, które nie są ściany i znaleźćConnectedComponents
wierzchołka wyjściowego. Dane wyjściowe to wykres (pokazany obrócony o 90º w kierunku przeciwnym do ruchu wskazówek zegara) z nieściennymi wierzchołkami zaznaczonymi na czerwono, a wypełnione wierzchołki zaznaczonymi na żółto. Na przykład dla pierwszego przypadku testowego dane wyjściowe wyglądają następująco:źródło
f=...
f[{0,...,0;0,...,0}, 19]
i tym podobne zawiodły.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]
(dla pierwszego przypadku testowego). Zredagowałem to w pytaniu - przepraszam, nie było na początek!