Descripción del desafío
Llamemos a una matriz rectangular de dos dimensiones (lo que significa que cada subcadena tiene la misma longitud), una cuadrícula . Cada unidad de una cuadrícula es un espacio vacío o un borde . En una cuadrícula de caracteres, el espacio vacío está representado por un solo espacio en blanco; cualquier otro personaje se trata como un borde. Cuadrículas de muestra ( +
's, |
' sy -
's añadidas para facilitar la lectura; no son parte de la cuadrícula ):
+----+
| |
| |
| |
| |
| |
+----+ an empty 4x5 grid
+------+
| |
| # |
| # |
+------+ a 6x3 grid with 2 borders
+----------+
| |
| |
| ##### |
| # # |
| ## # <------ enclosed area
| # # |
| ###### |
| |
+----------+ a 10x8 grid with an enclosed area
Dada una cuadrícula 2D y un par de coordenadas, rellena el área cerrada que rodea el punto representado por las coordenadas.
Muestra de entradas / salidas
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|
| | | |
| | | |
+----------------+ +----------------+
Notas
Una cuadrícula vacía se considera cerrada, es decir, los bordes también están implícitamente ubicados a lo largo de los bordes de la cuadrícula (ver ejemplos 1. y 5.),
Una esquina de un área cerrada no necesita tener forma de L. Por lo tanto, las dos áreas siguientes son equivalentes:
#### ##
# # # #
# # == # #
# # # #
#### ##
Si una unidad debajo de las coordenadas resulta ser un borde, puede dejar la cuadrícula sin cambios (como en el ejemplo 4) o tratarla como un espacio vacío,
Puede elegir cualquier carácter para relleno / espacio vacío siempre que incluya esta información en el envío,
Si usa un tipo diferente a
char
sus propósitos, puede usarloints
(0
para el espacio vacío,1
para el borde) obooleans
(true
yfalse
respectivamente) o cualquier otro tipo, solo asegúrese de incluir esta información en su envío,Las coordenadas utilizadas en los ejemplos anteriores son
(row, column)
coordenadas indexadas en 0 , ya que es más conveniente para una matriz bidimensional. Si desea utilizar(column, row)
el sistema (cartesiano) y / o coordenadas sin índice 0, especifíquelo en su envío.Si no sabe por dónde empezar, consulte el artículo de Wikipedia sobre inundación
Recuerde que este es un desafío de código de golf , ¡así que haga su código lo más corto posible!
fuente
Respuestas:
MATLAB,
307 bytesComo podemos usar entradas lógicas en lugar de cadenas, podemos usar la función simple, como es:
Esta es una función anónima. Para el uso, tenemos que asumir un nombre, por ejemplo
f=@
imfill
. Entonces podemos evaluarlo comof(input,point)
, dondeinput
es una matriz lógica, por ejemplo[0,0;0,1]
, ypoint
es un vector 2d con coordenadas basadas en 1, por ejemplo[1,2]
.Versión antigua trabajando en cadenas:
Esta función anónima acepta la entrada, así como un vector con las coordenadas (índice basado en 1). La función
imfill
hace exactamente lo que necesitamos, pero opera solo en imágenes binarias. Es por eso que convertimos la matriz de entrada en una matriz lógica (donde#
están los límites, y(los espacios) son el vacío), realiza el relleno y luego se convierte de nuevo. (De nuevo
#
se llena, el espacio no se llena).Gracias @LuisMendo por -
1byte.fuente
~=32
por>32
C, 162 bytes
Toma datos de argumentos (
./floodfill X Y grid
). La cuadrícula debe contener\n
o\r\n
entre cada línea, la nueva línea final es opcional. La forma más simple que he encontrado para invocar desde shell:Salidas a stdout, utilizando
!
para el carácter de relleno. Si la posición de inicio coincide con a#
, no hace ningún cambio.Descompostura:
Tenga en cuenta que esto se basa en modificar la cadena de argumento de entrada, que está prohibida, por lo que esto puede no funcionar en todas las plataformas (las declaraciones implícitas también hacen que esto no sea estándar).
fuente
int w, l;
a simplementew, l;
- gcc lo predetermina aint
escribirC -
263247240238 bytesEsta es la
primerasegundatercera versión, creo que el código también se puede reducir.Y versión legible:
Compilar y ejecutar:
gcc -o flood floodgolf.c && cat 1.txt | ./flood
Recursos:
Nota: estoy trabajando en
int
valores. Cada(32) se trata como un espacio vacío. Cualquier otro valor se trata como borde. Las coordenadas están en formato.
(row, column)
fuente
for
(scanf
aquí), y usar el primer parámetro de main como una declaración int barata funcionará en la mayoría de los compiladores. También es posible que pueda ahorrar un poco al aplanar su matriz (ciertamente debería ayudar al ciclo de impresión)Python 2, 158 bytes
Pruébalo en línea . Solución recursiva simple
0 indexado en orden fila-columna
1 - espacio vacío, 0 - espacio lleno
Toma la entrada como una matriz de matrices de 1 y 0, y dos números
fuente
Perl 5 , 129 + 1 (-a) = 130 bytes
Pruébalo en línea!
¿Cómo?
fuente