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