introduction
J'ai une pièce pleine de miroirs magiques . Ce sont des artefacts mystérieux qui peuvent reproduire n'importe quel élément, à l'exception d'un autre miroir magique. Plus explicitement, une version en double de l'élément apparaîtra de l'autre côté du miroir, à la même distance. Cependant, s'il y a un autre miroir magique sur le chemin de chaque côté, entre le miroir de duplication et l'un ou l'autre élément (original ou dupliqué), le doublon n'est pas formé. L'article d'origine peut être à gauche ou à droite du miroir, et le duplicata apparaîtra de l'autre côté. De plus, l'élément en double peut lui-même être dupliqué par un autre miroir. Les éléments ne bloquent jamais la duplication d'autres éléments (sauf en étant directement sur la position du double potentiel).
Contribution
Votre entrée est une chaîne composée des caractères .#|
, qui représentent un espace vide, des objets et des miroirs magiques. Il y aura toujours au moins un miroir magique dans l'entrée.
Sortie
Votre sortie doit être une autre chaîne où chaque miroir magique a dupliqué chaque élément qu'il peut, selon les règles ci-dessus. Vous pouvez supposer qu'il y aura toujours un espace vide à l'endroit où un élément en double apparaît (afin qu'ils ne sortent pas des limites).
Exemples
Considérez la chaîne d'entrée
.#.|.....|......#
A B C D
où nous avons marqué certaines positions pour plus de clarté. Le miroir B
duplique l'article A
, qui se termine à sa droite:
.#.|.#...|......#
A B C D
Miroir C
duplique ensuite le nouvel élément:
.#.|.#...|...#..#
A B C D
Le miroir C
ne peut pas dupliquer l'élément A
, car le miroir B
est sur le chemin. Il ne peut pas non plus dupliquer l'élément D
, car le miroir B
est sur le chemin de l'autre côté. De même, le miroir B
ne peut pas dupliquer l'élément D
ou le doublon à côté, car le miroir C
est sur le chemin, c'est donc la sortie correcte.
Pour un autre exemple, considérons l'entrée
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
Le miroir D
peut être dupliqué A
et B
à droite, E
et G
à gauche.
C
et F
sont déjà des doublons les uns des autres. La chaîne devient
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Mirror H
peut dupliquer E
, F
et les doublons de A
et B
vers la droite et I
vers la gauche.
G
et J
sont déjà des doublons les uns des autres, et le miroir D
est sur le chemin de K
. Maintenant nous avons
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Enfin, le miroir D
peut dupliquer le doublon de I
vers la gauche. On se retrouve avec
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
Règles et notation
Vous pouvez écrire soit un programme complet soit une fonction. Le nombre d'octets le plus bas gagne. Les soumissions qui n'utilisent pas de moteurs d'expression régulière sont en concurrence distincte de celles qui le font et peuvent être marquées d'un (pas d'expression régulière) .
Cas de test
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"