Tarea
Dado un diagrama ASCII de un bucle
p.ej
....................
......@@@@@.........
......@...@.........
.....@@...@@@@@.....
....@@........@.....
....@........@@.....
....@@@@@@@@@@......
....................
....................
Y una ubicación en el circuito
p.ej
(7,1)
Debes encontrar el interior y el exterior del bucle.
p.ej
00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000
Especificaciones
Puede tomar la entrada para el diagrama como una cadena separada por nuevas líneas o equivalente obvio
Recibirá una coordenada en el bucle (0 o 1 indexado) como parte de su entrada. Puede colocar su origen en cualquier lugar que desee. Puede tomar esta coordenada en
(<row>, <column>)
,(<column>, <row>)
o como la posición lineal en la cadena. Puede recibir estos datos en cualquier método razonable. Todos los caracteres en el bucle serán los mismos que los del índice.La salida preferida es una matriz bidimensional de valores de verdad y falsedad, sin embargo, se aceptan cadenas de
1
y0
separadas por líneas nuevas o cualquier equivalente obvio de las dos últimas. El interior y el exterior deben tener valores de verdad diferentes, pero no importa cuál es cuál.Un bucle se define como un grupo de caracteres de modo que todos sean el mismo carácter ( por ejemplo
@
) y de modo que cada carácter en el bucle tenga una ruta al carácter original (el carácter en la coordenada de entrada) que solo pasa por ese mismo carácter (geometría del taxi sin diagonales ).El interior es todo el bucle en sí y los lugares que no pueden alcanzar el borde del diagrama sin cruzar el bucle.
El exterior está en todas partes.
Esto es código golf
[['.', '.'],['.', '@']]
lugar de una cadena con líneas nuevas?Respuestas:
MATLAB,
16315914678 bytesGracias @ rahnema1 por -66 bytes !!!
Ahora funciona en ¡ Pruébalo en línea!PERO se necesitaron algunos ajustes, ya que MATLAB y Octave no son totalmente compatibles.
Explicación
Primero creamos una imagen binaria que enmascara todos los caracteres que son iguales al carácter inicial. Luego determinamos el componente conectado en el que se encuentra el carácter inicial.
Después de eso, creamos una imagen de ese componente conectado y aplicamos rellenar todos los "agujeros" en la imagen.
fuente
MATLAB: 67 bytes
Un par de advertencias:
A
se supone que es una matriz de caracteres.output = f(A,2,8)
).bwlabel
yimfill
son parte de Image Processing Toolbox.fuente