Un relleno de caballero es un relleno de inundación utilizando la conectividad de la pieza de ajedrez de caballero. Específicamente:
1 1
1 1
0
1 1
1 1
(0 es el punto inicial, 1 muestra las celdas conectadas)
Desafío
Dada una cuadrícula 2D de espacios y paredes, y una ubicación inicial, realiza un relleno de caballero en la cuadrícula. El código más corto gana.
Reglas
Puede tomar entradas y producir salidas en cualquier formato que desee (imagen, cadena, matriz, lo que sea). Puede tomar la ubicación inicial como parte de la cuadrícula de entrada o como una coordenada separada. A los fines de esta explicación, se utilizará el siguiente formato:
######## # = wall ######## x = initial location ## x ## ## ## ######## ## ## ######## ########
La salida es una copia de la cuadrícula de entrada con el resultado de relleno de caballero agregado
Su relleno no debe estar en el mismo "color" que el espacio o las paredes, pero puede ser el mismo que el marcador de ubicación inicial. Por ejemplo, dada la imagen de arriba, una salida válida sería:
######## # = wall ######## @ = fill (could also have been x) ## @ @## ## @ @## ######## ##@ @ ## ######## ########
Puede suponer que la cuadrícula de entrada siempre contendrá una pared de 2 celdas en todos los lados
- Puede suponer que la ubicación inicial nunca estará dentro de una pared
- Puede suponer que la cuadrícula nunca será mayor que 1000x1000
- Los builtins están bien
- El código más corto (en bytes) gana
Casos de prueba
En todos los casos de prueba, #
denota un muro, denota un espacio vacío y
x
denota la ubicación inicial del relleno. @
denota el relleno de salida.
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:
##############
##############
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@###@@@###
##@@@#@#@@@###
##@@@###@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##############
##############
Respuestas:
Octava, 73 bytes
Demo en línea!
* Algunos cambios se aplicaron para ejecutarse en rextester.
Una función que toma una matriz 2d de 0 y 2 como pared y una matriz de 0 y 1 como ubicación inicial y genera una matriz de 0 y 1 y 2.
fuente
pkg load ...
cuando se ejecuta fuera del marco de prueba? Siimdilate
yde2bi
están disponibles sin importaciones explícitas, está bien.-auto
se eliminó antes, no hay problema, y supongo que esta respuesta no usa ninguna característica nueva.JavaScript (ES6), 116 bytes
Basado en mi respuesta a Detect Failing Castles . Llena usando
x
s.fuente
Python 3 ,
394 387 381 356 352 347 319 313 154139 bytesexcept:0
try: except
bloque y varios otros campos de golf.g[(a,b)]
como solog[a,b]
Pruébalo en línea!
fuente
except:pass
lugar?except:0
Mathematica, 117 bytes
La historia habitual: poderosos complementos pero nombres largos ...
¡Pruébalo en el sandbox de Wolfram!
Se necesitan dos entradas: primero es la cuadrícula de entrada como una matriz de
0
s (para las paredes)1
ys (para espacios), luego un solo entero para la posición inicial, que se encuentra numerando la cuadrícula a lo largo de las filas de arriba a abajo, por ejemploPuedes llamar a la función como
HighlightGraph[...~Prepend~h]&[{{0,0,...,0}, {0,0,...,0}, ..., {0,0,...,0}}, 20]
.La
KnightTourGraph
función construye un gráfico con vértices correspondientes a las posiciones en la cuadrícula y los bordes correspondientes a los movimientos válidos de los caballeros, luego tomamosSubgraph
los vértices que no son paredes y encontramos elConnectedComponents
vértice inicial. La salida es un gráfico (se muestra girado 90º en sentido antihorario) con los vértices que no son de pared resaltados en rojo y los vértices rellenos resaltados en amarillo. Por ejemplo, para el primer caso de prueba, la salida se ve así:fuente
f=...
f[{0,...,0;0,...,0}, 19]
y similares han fallado miserablemente.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]
(para el primer caso de prueba). Lo he editado en la pregunta, ¡lo siento, para empezar no estaba allí!