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 Csau đó nhân đôi mục mới:
.#.|.#...|...#..#
A B C D
Gương Ckhô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 Bnằm ở phía bên kia. Tương tự như vậy, gương Bkhông thể sao chép mục Dhoặ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 Dcó thể nhân đôi Avà Bsang phải, Evà Gsang trái.
Cvà Fđã là bản sao của nhau. Chuỗi trở thành
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
Gương Hcó thể nhân đôi E, Fvà các bản sao của Avà Bbên phải và Ibên trái.
Gvà Jđã là bản sao của nhau, và gương Dlà 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 Dcó thể nhân đôi bản sao Ibê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
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"