Введение
У меня есть комната, полная волшебных зеркал . Это загадочные артефакты, которые могут дублировать любой предмет, кроме другого волшебного зеркала. Более точно, дублированная версия предмета появится на другой стороне зеркала, на том же расстоянии. Однако, если с обеих сторон на пути между дублирующим зеркалом и каким-либо предметом (оригиналом или дубликатом) находится другое волшебное зеркало, дубликат не формируется. Оригинальный предмет может быть слева или справа от зеркала, а дубликат появится на другой стороне. Кроме того, дубликат предмета может сам дублироваться другим зеркалом. Элементы никогда не блокируют дублирование других элементов (за исключением того, что они находятся непосредственно на позиции потенциального дубликата).
вход
Ваш ввод - это строка, состоящая из символов .#|, которые представляют пустое пространство, предметы и магические зеркала. На входе всегда будет хотя бы одно волшебное зеркало.
Выход
В результате вы получите еще одну строку, в которой каждое волшебное зеркало дублирует каждый элемент, в соответствии с приведенными выше правилами. Вы можете предположить, что на месте, где появляется дубликат, всегда будет пустое место (чтобы они не выходили за пределы).
Примеры
Рассмотрим входную строку
.#.|.....|......#
A B C D
где мы отметили некоторые позиции для ясности. Зеркало Bдублирует элемент A, который заканчивается справа от него:
.#.|.#...|......#
A B C D
CЗатем зеркало дублирует новый элемент:
.#.|.#...|...#..#
A B C D
Зеркало Cне может дублировать предмет A, так как зеркало Bмешает. Он также не может дублировать элемент D, так как зеркало Bнаходится на пути с другой стороны. Аналогично, зеркало Bне может дублировать элемент Dили дубликат рядом с ним, так как зеркало Cмешает, так что это правильный вывод.
Для другого примера рассмотрим ввод
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
Зеркало Dможно дублировать Aи Bвправо, Eи Gвлево.
Cи Fуже дублируют друг друга. Строка становится
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Зеркало Hможет дублировать E, Fи дубликаты Aи Bвправо, и Iвлево.
Gи Jуже дублируют друг друга, а зеркало Dстоит на пути K. Теперь у нас есть
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Наконец, зеркало Dможет дублировать копию Iслева. Мы заканчиваем с
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
Правила и оценки
Вы можете написать либо полную программу, либо функцию. Побеждает самое низкое число байтов. Работы, в которых не используются движки регулярных выражений, конкурируют отдельно от тех, которые используют регулярные выражения, и могут быть помечены (без регулярных выражений) .
Контрольные примеры
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"