บทนำ
ฉันมีห้องเต็มไปด้วยกระจกวิเศษ พวกเขาเป็นสิ่งประดิษฐ์ลึกลับที่สามารถทำซ้ำรายการใด ๆ ยกเว้นกระจกวิเศษอื่น รายการรุ่นที่ซ้ำกันจะปรากฏที่อีกด้านหนึ่งของมิเรอร์ในระยะทางเดียวกัน อย่างไรก็ตามหากมีกระจกวิเศษอีกอันอยู่ข้างใดข้างหนึ่งระหว่างกระจกที่ทำซ้ำและสิ่งของ (ทั้งแบบดั้งเดิมหรือแบบซ้ำ) จะไม่เกิดการทำซ้ำ รายการต้นฉบับสามารถเป็นไปทางซ้ายหรือทางขวาของกระจกเงาและรายการที่ซ้ำกันจะปรากฏที่อีกด้านหนึ่ง อีกทั้งสามารถทำสำเนารายการที่ซ้ำกันด้วยมิร์เรอร์อื่น รายการไม่เคยบล็อกการทำซ้ำของรายการอื่น ๆ (ยกเว้นโดยการอยู่ในตำแหน่งที่ต้องการซ้ำโดยตรง)
อินพุต
ข้อมูลที่คุณป้อนเป็นสตริงที่ประกอบด้วยอักขระ.#|ซึ่งแสดงถึงพื้นที่ว่างรายการและกระจกวิเศษ จะมีกระจกวิเศษอย่างน้อยหนึ่งตัวในอินพุต
เอาท์พุต
ผลลัพธ์ของคุณจะเป็นอีกสายหนึ่งที่กระจกวิเศษแต่ละอันจะทำซ้ำทุกรายการที่ทำได้ตามกฎข้างต้น คุณสามารถสันนิษฐานได้ว่าจะมีพื้นที่ว่างเสมอในจุดที่มีรายการที่ซ้ำกันปรากฏขึ้น (ดังนั้นพวกเขาจะไม่ออกนอกขอบเขต)
ตัวอย่าง
พิจารณาสตริงการป้อนข้อมูล
.#.|.....|......#
A B C D
ที่ซึ่งเราได้ทำเครื่องหมายบางตำแหน่งเพื่อความชัดเจน มิเรอร์BทำสำเนารายการAซึ่งสิ้นสุดไปทางขวา:
.#.|.#...|......#
A B C D
มิร์เรอร์Cทำซ้ำรายการใหม่:
.#.|.#...|...#..#
A B C D
มิเรอร์Cไม่สามารถทำซ้ำรายการAเนื่องจากมิเรอร์Bอยู่ในทาง นอกจากนี้ยังไม่สามารถทำซ้ำรายการDเนื่องจากมิเรอร์Bอยู่ในอีกด้านหนึ่ง ในทำนองเดียวกันมิเรอร์Bไม่สามารถทำซ้ำรายการDหรือทำซ้ำที่อยู่ติดกับมันเนื่องจากมิเรอร์Cอยู่ในทางดังนั้นนี่คือผลลัพธ์ที่ถูกต้อง
สำหรับตัวอย่างอื่นให้พิจารณาอินพุต
.##..#...|#..##...|..##....#.
AB C DE FG H IJ K
มิเรอร์Dสามารถทำซ้ำAและBไปทางขวาEและGไปทางซ้าย
CและFซ้ำซ้อนกันอยู่แล้ว สตริงกลายเป็น
.##.##..#|#..##.##|..##....#.
AB C DE FG H IJ K
กระจกHสามารถทำซ้ำE, Fและรายการที่ซ้ำกันของAและBไปทางขวาและIไปทางซ้าย
GและJมีการซ้ำซ้อนกันอยู่แล้วและมิเรอร์Dก็เป็นแบบKนั้น ตอนนี้เรามี
.##.##..#|#..#####|#####..##.
AB C DE FG H IJ K
ในที่สุดกระจกDสามารถทำซ้ำสิ่งที่ซ้ำกันIทางซ้าย เราจบลงด้วย
.#####..#|#..#####|#####..##.
AB C DE FG H IJ K
กฎและการให้คะแนน
คุณสามารถเขียนโปรแกรมเต็มหรือฟังก์ชั่น จำนวนไบต์ต่ำสุดชนะ ส่งที่ไม่ได้ใช้เครื่องมือ regex แข่งขันแยกต่างหากจากผู้ที่ทำและอาจถูกทำเครื่องหมายด้วย(ไม่ regex)
กรณีทดสอบ
"|" -> "|"
"..|.." -> "..|.."
".#.|..." -> ".#.|.#."
"..#|.#." -> ".##|##."
".#..|....|.." -> ".#..|..#.|.#"
".|..|.#....." -> "#|#.|.#....."
"...|.#...|....#" -> ".##|##...|...##"
"......#|......." -> "......#|#......"
".#.|.....|......#" -> ".#.|.#...|...#..#"
".......|...#.##|...." -> "##.#...|...#.##|##.#"
"...#..||.......#..#...#" -> "...#..||.......#..#...#"
".##|.#....||#||......#|.#" -> ".##|##....||#||.....##|##"
".##..#...|#..##...|..##....#." -> ".#####..#|#..#####|#####..##."
".#|...||...|#...|..##...|#...." -> ".#|#..||.##|##..|..##..#|#..##"
"....#.|...#.|..|.|.....|..#......" -> "..#.#.|.#.#.|.#|#|#.#..|..#.#...."
"..|....|.....#.|.....|...|.#.|..|.|...#......" -> ".#|#...|...#.#.|.#.#.|.#.|.#.|.#|#|#..#......"