นี่เป็นครั้งแรกในชุดของความท้าทายของ Island Golf ความท้าทายต่อไป
ได้รับเกาะในรูปแบบ ASCII เอาท์พุทเส้นทางที่เหมาะสมที่สุดเพื่อแล่นเรือรอบเกาะ
อินพุต
ข้อมูลที่คุณป้อนจะเป็นตารางสี่เหลี่ยมที่ประกอบด้วยอักขระสองตัวซึ่งแสดงถึงที่ดินและน้ำ ในตัวอย่างด้านล่างที่ดิน#
และน้ำเป็น.
แต่คุณอาจแทนที่อักขระสองตัวที่คุณต้องการ
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
จะมีแผ่นพื้นอย่างน้อยหนึ่งแผ่นเสมอ แผ่นกระเบื้องพื้นดินจะต่อเนื่องกัน (เช่นมีเพียงเกาะเดียว) แผ่นน้ำก็จะต่อเนื่องกัน (เช่นไม่มีทะเลสาบ) เส้นขอบด้านนอกของตารางทั้งหมดจะเป็นแผ่นน้ำ แผ่นพื้นดินจะไม่เชื่อมต่อในแนวทแยงมุม: นั่นคือคุณจะไม่เห็นสิ่งที่ต้องการ
....
.#..
..#.
....
เอาท์พุต
รหัสของคุณจะต้องส่งออกกริดเดียวกันโดยมีcircumnavigation ที่สั้นที่สุดเอาไว้ ในตัวอย่างด้านล่างเส้นทาง circumnavigation จะถูกวาดด้วยo
แต่คุณสามารถทดแทนอักขระใดก็ได้ตราบใดที่มันแตกต่างจากตัวอักษรพื้นดินและน้ำ
circumnavigationเป็นโค้งปิดง่ายวาดทั้งหมดบนกระเบื้องน้ำที่ล้อมรอบอย่างเต็มที่กระเบื้องแผ่นดินทั้งหมดบนตาราง การเชื่อมต่อในแนวทแยงจะได้รับอนุญาต ตัวอย่างเช่นนี่คือ circumnavigation ของเกาะด้านบน (แต่ไม่ใช่อันที่สั้นที่สุด):
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
ความยาวของ circumnavigation ถูกคำนวณดังนี้: สำหรับทุกคู่ของไพ่ที่ติดกันบนเส้นทางถ้าพวกเขาเชื่อมต่อในแนวนอนหรือแนวตั้งเพิ่ม 1; หากพวกเขาเชื่อมต่อในแนวทแยงมุมเพิ่ม√2 ความยาวของเส้นทางด้านบนคือ 22 + 7√2 (≈ 31.9)
สั้นที่สุด circumnavigation เป็น circumnavigation กับระยะเวลาที่สั้นที่สุด โปรแกรมของคุณควรออกเส้นทางใดเส้นทางหนึ่งที่ตรงตามเงื่อนไขนี้ สำหรับเกาะส่วนใหญ่จะมีวิธีแก้ไขที่เป็นไปได้หลายอย่าง นี่คือทางออกหนึ่งสำหรับเกาะด้านบนที่มีความยาว 10 + 13√2 (≈ 28.4):
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
รายละเอียด
วิธีการแก้ปัญหาของคุณอาจจะเป็นโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น วิธีการอินพุตและเอาต์พุตดีฟอลต์ใด ๆนั้นเป็นที่ยอมรับ
อินพุตและเอาต์พุตของคุณอาจเป็นสตริงหลายบรรทัดหรือรายการสตริง หากภาษาของคุณมีประเภทอักขระที่แตกต่างจากสตริงอักขระเดี่ยวคุณอาจแทนที่ "รายการอักขระ" สำหรับ "สตริง" ในประโยคก่อนหน้า หากภาษาของคุณจำเป็นต้องใส่ความสูงและ / หรือความกว้างของตารางคุณสามารถทำได้ เอาต์พุตของคุณอาจ (เป็นทางเลือก) มีบรรทัดใหม่ต่อท้ายหนึ่งบรรทัด ดังที่ได้กล่าวไว้ข้างต้นคุณสามารถใช้อักขระที่แตกต่างกันสามตัวแทน#.o
(โปรดระบุในการส่งอักขระที่คุณใช้)
กรณีทดสอบ
A.หมู่เกาะที่มี circumnavigations สั้นที่สุดที่ไม่ซ้ำกัน:
...
.#.
...
.o.
o#o
.o.
......
.####.
......
.oooo.
o####o
.oooo.
......
......
..##..
...#..
......
......
......
..oo..
.o##o.
..o#o.
...o..
......
.......
.#####.
...#...
...#...
.#####.
.......
.ooooo.
o#####o
o..#..o
o..#..o
o#####o
.ooooo.
.......
...#...
...#...
.#####.
...#...
...#...
.......
...o...
..o#o..
.o.#.o.
o#####o
.o.#.o.
..o#o..
...o...
.......
.#####.
.##..#.
..#..#.
.......
.ooooo.
o#####o
o##..#o
.o#..#o
..oooo.
B.ตัวอย่างเกาะที่มีทางออกที่เป็นไปได้หลายประการ:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
ผลลัพธ์ที่เป็นไปได้:
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##.o..
..ooo...
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##.o..
..ooo...
C. กรณีทดสอบขนาดใหญ่เป็นส่วนสำคัญ
นี่คือรหัส - กอล์ฟ : รหัสที่สั้นที่สุดในแต่ละภาษาชนะ