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 Bduplica el elemento A, que termina a su derecha:
.#.|.#...|......#
A B C D
Mirror Cluego duplica el nuevo elemento:
.#.|.#...|...#..#
A B C D
El espejo Cno puede duplicar el elemento A, ya que el espejo Bestá en el camino. Tampoco puede duplicar elementos D, ya que el espejo Bestá en el otro lado. Del mismo modo, el espejo Bno puede duplicar el elemento Do el duplicado al lado, ya que el espejo Cestá 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 Dpuede duplicar Ay Bhacia la derecha Ey Ghacia la izquierda.
Cy Fya son duplicados el uno del otro. La cuerda se convierte
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Mirror Hpuede duplicar E, Fy los duplicados de Ay Ba la derecha y Ia la izquierda.
Gy Jya son duplicados entre sí, y el espejo Destá en el camino de K. Ahora tenemos
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Finalmente, el espejo Dpuede duplicar el duplicado de Ia 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
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"