introduzione
Ho una stanza piena di specchi magici . Sono artefatti misteriosi che possono duplicare qualsiasi oggetto, tranne un altro specchio magico. Più esplicitamente, una versione duplicata dell'elemento apparirà sull'altro lato dello specchio, alla stessa distanza. Tuttavia, se c'è un altro specchio magico tra i due lati, tra lo specchio duplicato e uno degli oggetti (originale o duplicato), il duplicato non si forma. L'elemento originale può essere a sinistra oa destra dello specchio e il duplicato apparirà sull'altro lato. Inoltre, l'elemento duplicato può essere duplicato da un altro mirror. Gli oggetti non bloccano mai la duplicazione di altri oggetti (tranne per il fatto di trovarsi direttamente nella posizione dell'aspirante duplicato).
Ingresso
Il tuo input è una stringa composta dai caratteri .#|, che rappresentano spazio vuoto, oggetti e specchi magici. Ci sarà sempre almeno uno specchio magico nell'input.
Produzione
Il tuo output deve essere un'altra stringa in cui ogni specchio magico ha duplicato ogni oggetto che può, secondo le regole sopra. Puoi presumere che ci sarà sempre uno spazio vuoto nel punto in cui appare un elemento duplicato (quindi non andranno oltre i limiti).
Esempi
Considera la stringa di input
.#.|.....|......#
A B C D
dove abbiamo segnato alcune posizioni per chiarezza. Il mirror Bduplica l'elemento A, che finisce alla sua destra:
.#.|.#...|......#
A B C D
Mirror Cquindi duplica il nuovo elemento:
.#.|.#...|...#..#
A B C D
Il mirror Cnon può duplicare l'elemento A, poiché il mirror Bè in mezzo. Inoltre, non è possibile duplicare l'elemento D, poiché il mirror si Btrova sull'altro lato. Allo stesso modo, mirror Bnon può duplicare l'elemento Do il duplicato accanto ad esso, poiché mirror Cè in mezzo, quindi questo è l'output corretto.
Per un altro esempio, considerare l'input
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
Il mirror Dpuò duplicare Asia Ba destra Eche Ga sinistra.
Ce Fsono duplicati già uno dall'altro. La stringa diventa
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Mirror Hpuò duplicare E, Fe i duplicati di Ae Bverso destra e Iverso sinistra.
Ge Jsono già duplicati l'uno dell'altro, e mirror Dè in mezzo a K. Ora abbiamo
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Infine, il mirror Dpuò duplicare il duplicato di Ia sinistra. Finiamo con
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
Regole e punteggio
È possibile scrivere un programma completo o una funzione. Vince il conteggio dei byte più basso. I contributi che non utilizzano i motori regex competono separatamente da quelli che lo fanno e possono essere contrassegnati con (nessun regex) .
Casi test
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"