Um preenchimento de cavaleiro é um preenchimento de inundação usando a conectividade da peça de xadrez do cavaleiro. Especificamente:
1 1
1 1
0
1 1
1 1
(0 é o ponto inicial, 1s mostra as células conectadas)
Desafio
Dada uma grade 2D de espaços e paredes, e uma localização inicial, execute um preenchimento de cavaleiro na grade. O menor código vence.
Regras
Você pode receber e produzir saída em qualquer formato que desejar (imagem, string, array, qualquer que seja). Você pode usar o local inicial como parte da grade de entrada ou como uma coordenada separada. Para os fins desta explicação, o seguinte formato será usado:
######## # = wall ######## x = initial location ## x ## ## ## ######## ## ## ######## ########
Saída é uma cópia da grade de entrada com o resultado de preenchimento do cavaleiro adicionado
Seu preenchimento não deve ter a mesma "cor" que o espaço ou as paredes, mas pode ser o mesmo que o marcador de local inicial. Por exemplo, dada a imagem acima, uma saída válida seria:
######## # = wall ######## @ = fill (could also have been x) ## @ @## ## @ @## ######## ##@ @ ## ######## ########
Você pode supor que a grade de entrada sempre contenha uma parede de duas células em todos os lados
- Você pode assumir que o local inicial nunca estará dentro de uma parede
- Você pode supor que a grade nunca será maior que 1000 x 1000
- Builtins are fine
- O código mais curto (em bytes) vence
Casos de teste
Em todos os casos de teste, #
denota uma parede, indica espaço vazio e
x
indica a localização inicial do preenchimento. @
indica o preenchimento da saída.
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:
##############
##############
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@###@@@###
##@@@#@#@@@###
##@@@###@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##############
##############