Giới thiệu
Tôi có một căn phòng đầy những tấm gương ma thuật . Chúng là những cổ vật bí ẩn có thể nhân đôi bất kỳ vật phẩm nào, ngoại trừ một chiếc gương ma thuật khác. Rõ ràng hơn, một phiên bản trùng lặp của vật phẩm sẽ xuất hiện ở phía bên kia của gương, ở cùng một khoảng cách. Tuy nhiên, nếu có một gương ma thuật khác ở hai bên, giữa gương nhân đôi và một trong hai vật phẩm (nguyên bản hoặc trùng lặp), bản sao sẽ không được hình thành. Mục ban đầu có thể là bên trái hoặc bên phải của gương và bản sao sẽ xuất hiện ở phía bên kia. Ngoài ra, các mục trùng lặp có thể được nhân đôi bởi một gương khác. Các mục không bao giờ chặn sự trùng lặp của các mục khác (ngoại trừ bằng cách trực tiếp vào vị trí của mục trùng lặp).
Đầu vào
Đầu vào của bạn là một chuỗi bao gồm các ký tự .#|
, đại diện cho không gian trống, vật phẩm và gương ma thuật. Sẽ luôn có ít nhất một chiếc gương ma thuật trong đầu vào.
Đầu ra
Đầu ra của bạn sẽ là một chuỗi khác trong đó mỗi gương ma thuật đã nhân đôi mọi vật phẩm có thể, theo các quy tắc ở trên. Bạn có thể giả định rằng sẽ luôn có một khoảng trống tại chỗ xuất hiện một mục trùng lặp (vì vậy chúng sẽ không đi ra khỏi giới hạn).
Ví dụ
Hãy xem xét chuỗi đầu vào
.#.|.....|......#
A B C D
nơi chúng tôi đã đánh dấu một số vị trí cho rõ ràng. Gương nhân B
đôi mục A
, kết thúc ở bên phải của nó:
.#.|.#...|......#
A B C D
Gương C
sau đó nhân đôi mục mới:
.#.|.#...|...#..#
A B C D
Gương C
không thể nhân đôi vật phẩm A
, vì gương B
đang cản đường. Nó cũng không thể sao chép mục D
, vì gương B
nằm ở phía bên kia. Tương tự như vậy, gương B
không thể sao chép mục D
hoặc trùng lặp bên cạnh nó, vì gương C
đang cản trở, vì vậy đây là đầu ra chính xác.
Đối với một ví dụ khác, hãy xem xét đầu vào
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
Gương D
có thể nhân đôi A
và B
sang phải, E
và G
sang trái.
C
và F
đã là bản sao của nhau. Chuỗi trở thành
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Gương H
có thể nhân đôi E
, F
và các bản sao của A
và B
bên phải và I
bên trái.
G
và J
đã là bản sao của nhau, và gương D
là theo cách của K
. Bây giờ chúng tôi có
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
Cuối cùng, gương D
có thể nhân đôi bản sao I
bên trái. Chúng tôi kết thúc với
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
Quy tắc và tính điểm
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng. Các bài nộp không sử dụng công cụ regex cạnh tranh tách biệt với các công cụ thực hiện và có thể được đánh dấu bằng (không có regex) .
Các trường hợp thử nghiệm
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"