前書き
魔法の鏡でいっぱいの部屋があります。それらは、別の魔法の鏡を除いて、あらゆるアイテムを複製できる神秘的なアーティファクトです。より明確には、アイテムの複製バージョンが同じ距離でミラーの反対側に表示されます。ただし、複製ミラーとアイテム(オリジナルまたは複製)の間に、両側に別のマジックミラーがある場合、複製は形成されません。元のアイテムはミラーの左または右に配置でき、複製は反対側に表示されます。また、複製したアイテム自体を別のミラーで複製できます。アイテムが他のアイテムの複製をブロックすることはありません(複製される予定の位置に直接いることを除く)。
入力
入力は、.#|空のスペース、アイテム、マジックミラーを表す文字で構成される文字列です。入力には常に少なくとも1つのマジックミラーがあります。
出力
出力は、上記のルールに従って、各マジックミラーが可能なすべてのアイテムを複製した別の文字列になります。重複するアイテムが表示される場所には常に空きスペースがあると想定できます(したがって、アイテムが範囲外に出ることはありません)。
例
入力文字列を考えます
.#.|.....|......#
A B C D
ここでは明確にするためにいくつかの位置をマークしています。ミラーBはitemを複製Aし、最終的に右になります。
.#.|.#...|......#
A B C D
ミラーCは新しいアイテムを複製します:
.#.|.#...|...#..#
A B C D
ミラーCが邪魔になっているAため、ミラーBはアイテムを複製できません。DミラーBが反対側にあるため、itemを複製することもできません。同様に、ミラー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
ルールとスコアリング
完全なプログラムまたは関数のいずれかを作成できます。最も低いバイトカウントが優先されます。正規表現エンジンを使用しない送信は、正規表現エンジンとは別に競合し、(正規表現なし)とマークされる場合があります。
テストケース
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"