Wprowadzenie
Mam pokój pełen magicznych luster . Są to tajemnicze artefakty, które mogą powielić dowolny przedmiot, z wyjątkiem innego magicznego lustra. Mówiąc dokładniej, duplikat wersji elementu pojawi się po drugiej stronie lustra, w tej samej odległości. Jeśli jednak po obu stronach znajduje się inne magiczne lustro, między lustrem do duplikowania a dowolnym przedmiotem (oryginalnym lub duplikatem), duplikat nie jest tworzony. Oryginalny element może znajdować się po lewej lub prawej stronie lustra, a duplikat pojawi się po drugiej stronie. Ponadto zduplikowany element może sam zostać powielony przez inne dublowanie. Przedmioty nigdy nie blokują powielania innych przedmiotów (z wyjątkiem tego, że znajdują się bezpośrednio na pozycji potencjalnego duplikatu).
Wkład
Twój wkład to ciąg znaków składający się z znaków .#|reprezentujących puste miejsce, przedmioty i magiczne zwierciadła. Na wejściu zawsze będzie przynajmniej jedno magiczne lustro.
Wydajność
Twój wynik będzie kolejnym ciągiem, w którym każde magiczne lustro powieli każdy możliwy przedmiot, zgodnie z powyższymi zasadami. Możesz założyć, że w miejscu, w którym pojawi się zduplikowany przedmiot, zawsze będzie puste miejsce (więc nie będą przekraczać granic).
Przykłady
Rozważ ciąg wejściowy
.#.|.....|......#
A B C D
gdzie zaznaczyliśmy niektóre pozycje dla jasności. Lustro Bduplikuje element A, który kończy się po jego prawej stronie:
.#.|.#...|......#
A B C D
Mirror Cnastępnie powiela nowy element:
.#.|.#...|...#..#
A B C D
Lustro Cnie może powielić elementu A, ponieważ przeszkadza mu lustro B. Nie może również powielać przedmiotu D, ponieważ lustro przeszkadza Bpo drugiej stronie. Podobnie, lustro Bnie może powielić elementu Dlub duplikatu obok niego, ponieważ lustro przeszkadza C, więc jest to prawidłowe wyjście.
W innym przykładzie rozważmy dane wejściowe
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
Lustro Dmoże powielać Ai Bna prawo, a Ei Gw lewo.
Ci Fsą już duplikatami. Ciąg staje się
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Lustro Hmoże powielać E, Foraz duplikaty Ai Bna prawo i Ina lewo.
Gi Jsą już duplikatami, a lustro Djest na drodze K. Teraz mamy
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Wreszcie lustro Dmoże powielić duplikat Ipo lewej stronie. Kończymy z
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
Zasady i punktacja
Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów. Zgłoszenia, które nie używają silników wyrażeń regularnych, konkurują osobno z tymi, które to robią i mogą być oznaczone symbolem (bez wyrażeń regularnych) .
Przypadki testowe
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"