Introducción
Tengo una habitación llena de espejos mágicos . Son artefactos misteriosos que pueden duplicar cualquier elemento, excepto otro espejo mágico. Más explícitamente, una versión duplicada del elemento aparecerá en el otro lado del espejo, a la misma distancia. Sin embargo, si hay otro espejo mágico en el camino a cada lado, entre el espejo duplicado y cualquier elemento (original o duplicado), el duplicado no se forma. El elemento original puede estar a la izquierda o a la derecha del espejo, y el duplicado aparecerá en el otro lado. Además, el elemento duplicado puede ser duplicado por otro espejo. Los elementos nunca bloquean la duplicación de otros elementos (excepto al estar directamente en la posición del posible duplicado).
Entrada
Su entrada es una cadena que consta de los caracteres .#|
, que representan espacios vacíos, elementos y espejos mágicos. Siempre habrá al menos un espejo mágico en la entrada.
Salida
Su salida será otra cadena donde cada espejo mágico ha duplicado todos los elementos que puede, de acuerdo con las reglas anteriores. Puede suponer que siempre habrá un espacio vacío en el lugar donde aparece un elemento duplicado (para que no se salgan de los límites).
Ejemplos
Considere la cadena de entrada
.#.|.....|......#
A B C D
donde hemos marcado algunas posiciones para mayor claridad. El espejo B
duplica el elemento A
, que termina a su derecha:
.#.|.#...|......#
A B C D
Mirror C
luego duplica el nuevo elemento:
.#.|.#...|...#..#
A B C D
El espejo C
no puede duplicar el elemento A
, ya que el espejo B
está en el camino. Tampoco puede duplicar elementos D
, ya que el espejo B
está en el otro lado. Del mismo modo, el espejo B
no puede duplicar el elemento D
o el duplicado al lado, ya que el espejo C
está en el camino, por lo que esta es la salida correcta.
Para otro ejemplo, considere la entrada
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
El espejo se D
puede duplicar A
y B
hacia la derecha E
y G
hacia la izquierda.
C
y F
ya son duplicados el uno del otro. La cuerda se convierte
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Mirror H
puede duplicar E
, F
y los duplicados de A
y B
a la derecha y I
a la izquierda.
G
y J
ya son duplicados entre sí, y el espejo D
está en el camino de K
. Ahora tenemos
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Finalmente, el espejo D
puede duplicar el duplicado de I
a la izquierda. Terminamos con
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
Reglas y puntaje
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana. Los envíos que no usan motores de expresiones regulares compiten por separado de los que sí lo hacen, y pueden marcarse con (sin expresiones regulares) .
Casos de prueba
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"