介绍
我的房间里装满了魔镜。它们是神秘的文物,可以复制任何物品,但另一个魔镜除外。更明确地说,该项目的重复版本将以相同的距离出现在镜子的另一侧。但是,如果在复制镜和任一物品(原始或复制品)之间的任一侧都有另一个魔术镜,则不会形成复制品。原始项目可以在镜子的左侧或右侧,并且重复项将出现在另一侧。而且,重复项本身可以被另一个镜像复制。项目永远不会阻止其他项目的重复(除非直接位于要复制的位置上)。
输入项
您的输入是一个由字符组成的字符串.#|
,它们代表空白,物品和魔镜。输入中将始终至少有一个魔术镜。
输出量
根据上述规则,您的输出将是另一个字符串,其中每个魔术镜都复制了它可以复制的所有物品。您可以假设出现重复项的位置始终有一个空白空间(因此它们不会超出范围)。
例子
考虑输入字符串
.#.|.....|......#
A B C D
为了清楚起见,我们在其中标记了一些位置。镜像B
重复项item A
,其最终在其右边:
.#.|.#...|......#
A B C D
镜像C
然后复制新项目:
.#.|.#...|...#..#
A B C D
镜像C
无法复制项目A
,因为镜像B
一直在进行中。它也不能复制项目D
,因为镜像B
在另一侧。同样,mirror B
不能复制项D
或旁边的重复项,因为mirror C
妨碍了,所以这是正确的输出。
再举一个例子,考虑输入
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
镜子D
可以复制A
和B
右侧,并且E
和G
左侧。
C
并且F
已经是彼此的副本。字符串变成
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Mirror H
可以复制E
,,F
以及和的重复项,A
以及B
在右边和I
左边的重复项。
G
并且J
已经是彼此的副本,并且mirror D
处于的方式K
。现在我们有
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
最后,mirror D
可以将的重复项复制I
到左侧。我们最终以
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
规则和计分
您可以编写完整的程序或函数。最低字节数获胜。不使用正则表达式引擎的提交将与不使用正则表达式引擎的提交分开竞争,并可能标有(没有正则表达式)。
测试用例
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"