Este es el primero de una serie de desafíos de Island Golf. Siguiente reto
Dada una isla en el arte ASCII, genera una ruta óptima para circunnavegarla.
Entrada
Su entrada será una cuadrícula rectangular que consta de dos caracteres, que representan tierra y agua. En los ejemplos a continuación, la tierra es #
y el agua es .
, pero puede sustituir cualquiera de los dos caracteres distintos que desee.
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
Siempre habrá al menos una ficha de tierra. Todas las fichas de tierra serán contiguas (es decir, solo hay una isla). Las baldosas de agua también serán contiguas (es decir, no hay lagos). El borde exterior de la cuadrícula será de baldosas de agua. Las fichas de tierra no se conectarán en diagonal: es decir, nunca verás algo como
....
.#..
..#.
....
Salida
Su código debe generar la misma cuadrícula, con una circunnavegación más corta dibujada en ella. En los ejemplos a continuación, se dibuja la ruta de circunnavegación o
, pero puede sustituir cualquier personaje siempre que sea distinto de sus caracteres de tierra y agua.
Una circunnavegación es una curva cerrada simple, dibujada completamente en baldosas de agua, que rodea completamente todas las baldosas terrestres en la cuadrícula. Se permiten conexiones diagonales . Por ejemplo, esta es una circunnavegación de la isla anterior (pero no la más corta):
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
La longitud de una circunnavegación se calcula de la siguiente manera: por cada par de mosaicos adyacentes en el camino, si están conectados horizontal o verticalmente, agregue 1; si están conectados en diagonal, agregue √2. La longitud de la ruta anterior es 22 + 7√2 (≈ 31.9).
Una circunnavegación más corta es una circunnavegación con la menor longitud posible. Su programa debe generar cualquier ruta que satisfaga esta condición. Para la mayoría de las islas, habrá múltiples soluciones posibles. Aquí hay una solución para la isla anterior, con longitud 10 + 13√2 (≈ 28.4):
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
Detalles
Su solución puede ser un programa completo o una función . Cualquiera de los métodos de entrada y salida predeterminados son aceptables.
Su entrada y salida puede ser una cadena multilínea o una lista de cadenas. Si su idioma tiene un tipo de caracteres distinto de las cadenas de un solo carácter, puede sustituir "lista de caracteres" por "cadena" en la oración anterior. Si su idioma necesita ingresar el alto y / o ancho de la cuadrícula, puede hacerlo. Su salida puede (opcionalmente) tener una nueva línea final. Como se mencionó anteriormente, puede usar tres caracteres distintos en lugar de #.o
(especifique en su envío qué caracteres está usando).
Casos de prueba
A. Islas con circunnavegaciones más cortas y únicas:
...
.#.
...
.o.
o#o
.o.
......
.####.
......
.oooo.
o####o
.oooo.
......
......
..##..
...#..
......
......
......
..oo..
.o##o.
..o#o.
...o..
......
.......
.#####.
...#...
...#...
.#####.
.......
.ooooo.
o#####o
o..#..o
o..#..o
o#####o
.ooooo.
.......
...#...
...#...
.#####.
...#...
...#...
.......
...o...
..o#o..
.o.#.o.
o#####o
.o.#.o.
..o#o..
...o...
.......
.#####.
.##..#.
..#..#.
.......
.ooooo.
o#####o
o##..#o
.o#..#o
..oooo.
B. Ejemplo de una isla con múltiples soluciones posibles:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
Salidas posibles:
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##.o..
..ooo...
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##.o..
..ooo...
C. Gran caso de prueba como Gist
Este es el código de golf : gana el código más corto en cada idioma.