Вступ
У мене є кімната, повна чарівних дзеркал . Вони - таємничі артефакти, які можуть копіювати будь-який предмет, крім іншого магічного дзеркала. Більш чітко, копія версії предмета з’явиться з іншого боку дзеркала, на однаковій відстані. Однак, якщо в обох сторонах є інше магічне дзеркало, між дзеркалом, що повторюється, та будь-яким предметом (оригінальним чи дублікатом), дублікат не утворюється. Оригінальний предмет може бути ліворуч або праворуч від дзеркала, а дублікат з’явиться з іншого боку. Також дублюючий предмет може сам дублюватися іншим дзеркалом. Елементи ніколи не блокують дублювання інших елементів (за винятком того, що вони знаходяться безпосередньо в позиції потенційного дубліката).
Вхідні дані
Ваш вхід - це рядок, що складається з символів .#|, які представляють порожній простір, предмети та магічні дзеркала. На вході завжди буде хоча б одне магічне дзеркало.
Вихідні дані
Ваш вихід повинен бути іншим рядком, де кожне магічне дзеркало дублювало кожен елемент, який може, відповідно до правил вище. Можна припустити, що на місці, де з’явиться дублікат, завжди буде порожнє місце (тому вони не вийдуть за межі).
Приклади
Розглянемо рядок введення
.#.|.....|......#
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
Правила та оцінка
Ви можете написати або повну програму, або функцію. Виграє найменший байт. Заявки, які не використовують двигуни регулярного вибору, конкурують окремо від тих, що роблять, і можуть бути позначені символом (без регулярного вираження) .
Тестові кейси
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"