Einführung
Ich habe einen Raum voller Zauberspiegel . Es handelt sich um mysteriöse Artefakte, die jedes Objekt, mit Ausnahme eines weiteren magischen Spiegels, duplizieren können. Genauer gesagt wird eine doppelte Version des Elements auf der anderen Seite des Spiegels im gleichen Abstand angezeigt. Befindet sich jedoch auf beiden Seiten ein anderer magischer Spiegel zwischen dem duplizierenden Spiegel und einem Gegenstand (Original oder Duplikat), wird das Duplikat nicht gebildet. Das Originalelement kann sich entweder links oder rechts vom Spiegel befinden, und das Duplikat wird auf der anderen Seite angezeigt. Das duplizierte Element kann auch selbst von einem anderen Spiegel dupliziert werden. Gegenstände blockieren niemals die Vervielfältigung anderer Gegenstände (es sei denn, sie befinden sich direkt an der Position des möglichen Gegenstands).
Eingang
Ihre Eingabe ist eine Zeichenfolge, die aus den Zeichen besteht .#|, die Leerzeichen, Objekte und magische Spiegel darstellen. In der Eingabe befindet sich immer mindestens ein Zauberspiegel.
Ausgabe
Ihre Ausgabe soll eine andere Zeichenfolge sein, in der jeder Magic Mirror alle Objekte dupliziert hat, die er kann, gemäß den obigen Regeln. Sie können davon ausgehen, dass an der Stelle, an der ein doppeltes Element angezeigt wird, immer ein leerer Bereich vorhanden ist (sodass diese Bereiche nicht überschritten werden).
Beispiele
Betrachten Sie die Eingabezeichenfolge
.#.|.....|......#
A B C D
wo wir aus Gründen der Übersichtlichkeit einige Positionen markiert haben. Der Spiegel Bdupliziert das Element A, das rechts davon endet:
.#.|.#...|......#
A B C D
Spiegeln Cdupliziert dann das neue Objekt:
.#.|.#...|...#..#
A B C D
Spiegeln Ckann kein Objekt duplizieren A, da Spiegeln Bim Weg ist. Es kann auch kein Objekt dupliziert werden D, da der Spiegel Bauf der anderen Seite im Weg ist. Ebenso kann der Spiegel Bnicht das Objekt Doder das Duplikat daneben duplizieren, da der Spiegel Cim Weg ist, sodass dies die richtige Ausgabe ist.
Betrachten Sie für ein anderes Beispiel die Eingabe
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
Mirror Dkann duplizieren Aund Bnach rechts Eund Gnach links.
Cund Fsind bereits Duplikate voneinander. Die Zeichenfolge wird
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Mirror Hkann duplizieren E, Fund die Duplikate von Aund Brechts und Ilinks.
Gund Jsind bereits Duplikate voneinander, und der Spiegel Dsteht im Weg von K. Jetzt haben wir
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Schließlich kann Mirror Ddas Duplikat von Ilinks duplizieren . Wir enden mit
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
Regeln und Wertung
Sie können entweder ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt. Einsendungen, die keine regulären Ausdrücke verwenden, konkurrieren getrennt von denen, die dies tun, und können mit (kein regulärer Ausdruck) gekennzeichnet sein .
Testfälle
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"