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 B
duplica o item A
, que termina à sua direita:
.#.|.#...|......#
A B C D
O espelho C
duplica o novo item:
.#.|.#...|...#..#
A B C D
O espelho C
não pode duplicar o item A
, pois o espelho B
está no caminho. Ele também não pode duplicar o item D
, pois o espelho B
está no caminho do outro lado. Da mesma forma, o espelho B
não pode duplicar o item D
ou a duplicata ao lado, pois o espelho C
está no caminho, portanto esta é a saída correta.
Para outro exemplo, considere a entrada
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
O espelho D
pode duplicar A
e B
para a direita E
e G
para a esquerda.
C
e F
já são duplicados um do outro. A cadeia se torna
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Espelho H
pode duplicar E
, F
e as cópias de A
e B
para a direita, e I
à esquerda.
G
e J
já são duplicados um do outro, e o espelho D
está no caminho K
. Agora temos
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Finalmente, o espelho D
pode duplicar a duplicação de I
para 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
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"