Introdução
Eu tenho uma sala cheia de espelhos mágicos . Eles são artefatos misteriosos que podem duplicar qualquer item, exceto outro espelho mágico. Mais explicitamente, uma versão duplicada do item aparecerá no outro lado do espelho, à mesma distância. No entanto, se houver outro espelho mágico no caminho de ambos os lados, entre o espelho de duplicação e o item (original ou duplicado), a duplicata não será formada. O item original pode ser esquerdo ou direito do espelho e a duplicata aparecerá no outro lado. Além disso, o item duplicado pode ser duplicado por outro espelho. Os itens nunca bloqueiam a duplicação de outros itens (exceto por estar diretamente na posição da possível duplicata).
Entrada
Sua entrada é uma sequência que consiste nos caracteres .#|, que representam espaço vazio, itens e espelhos mágicos. Sempre haverá pelo menos um espelho mágico na entrada.
Saída
Sua saída será outra string em que cada espelho mágico duplicou todos os itens possíveis, de acordo com as regras acima. Você pode assumir que sempre haverá um espaço vazio no local onde um item duplicado aparece (para que eles não saiam dos limites).
Exemplos
Considere a sequência de entrada
.#.|.....|......#
A B C D
onde marcamos algumas posições para maior clareza. O espelho Bduplica o item A, que termina à sua direita:
.#.|.#...|......#
A B C D
O espelho Cduplica o novo item:
.#.|.#...|...#..#
A B C D
O espelho Cnão pode duplicar o item A, pois o espelho Bestá no caminho. Ele também não pode duplicar o item D, pois o espelho Bestá no caminho do outro lado. Da mesma forma, o espelho Bnão pode duplicar o item Dou a duplicata ao lado, pois o espelho Cestá no caminho, portanto esta é a saída correta.
Para outro exemplo, considere a entrada
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
O espelho Dpode duplicar Ae Bpara a direita Ee Gpara a esquerda.
Ce Fjá são duplicados um do outro. A cadeia se torna
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Espelho Hpode duplicar E, Fe as cópias de Ae Bpara a direita, e Ià esquerda.
Ge Jjá são duplicados um do outro, e o espelho Destá no caminho K. Agora temos
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Finalmente, o espelho Dpode duplicar a duplicação de Ipara a esquerda. Acabamos com
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence. Os envios que não usam mecanismos regex competem separadamente daqueles que o fazem e podem ser marcados com (sem regex) .
Casos de teste
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"