บทนำ
ทุกคนรู้ว่าความเป็นไปได้ที่จะประสบความสำเร็จในการสำรวจสนามดาวเคราะห์น้อยคือประมาณ 3,720 ถึง 1 แต่แม้จะมีคำเตือนของคุณฮันโซโลก็ยังยินดีที่จะลองเสี่ยงโชคของเขา
ด้วยความกลัวต่อชีวิตเทียมของคุณคุณตัดสินใจที่จะเขียนรหัสในภาษาถิ่นของเรือ ( อ่าน: ภาษาโค้ดกอล์ฟที่คุณชื่นชอบ ) โปรแกรมการหลีกเลี่ยงดาวเคราะห์น้อยที่จะตัดสินใจว่าจะใช้เส้นทางใดในเขาวงกต ASCII ของดาวเคราะห์น้อย
อินพุต
Millenium Falcon มีโปรแกรมการแมปดาวเคราะห์น้อยซึ่งให้ข้อมูลคล้ายกับสิ่งนี้:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
แถวบนสุดอยู่ทางด้านซ้ายของเหยี่ยวนกเขาแถวด้านล่างอยู่ทางด้านขวาของเหยี่ยวนกเขาและเสาเป็นตัวแทนของสิ่งที่อยู่ด้านหน้าเรือ
- แต่ละ
#
คนเป็นอุปสรรค - แต่ละพื้นที่คือพื้นที่ว่างเปล่าที่เรือสามารถบินได้
- อินพุตมีความสูง 7 อักขระเสมอ นี่เป็นขีดจำกัดความกว้างของการทำแผนที่ดาวเคราะห์น้อย
- อินพุตมีความยาว 32 อักขระเสมอ (30 สำหรับฟิลด์นั้นและ 2 สำหรับการ จำกัด การเริ่มต้นและสิ้นสุด) นี่เป็นขีดจำกัดความลึกของการทำแผนที่ดาวเคราะห์น้อย แถบแนวตั้ง
|
ทำเครื่องหมายจุดเริ่มต้นและจุดสิ้นสุดของการทำแผนที่ @
คือเหยี่ยว มันจะอยู่ในแถวกลางเสมอ (แถวที่ 4) และคอลัมน์แรกในอินพุต- พื้นที่ที่เหลือในแถบแนวตั้งในคอลัมน์สุดท้ายคือสถานที่ที่เรือต้องมาถึง มันจะอยู่ในแถวกลางเสมอ (แถวที่ 4) และคอลัมน์สุดท้ายในอินพุต
อินพุตสามารถนำมาเป็นสตริงหลายบรรทัดอาร์เรย์ของสตริงจาก STDIN หรือพารามิเตอร์ฟังก์ชันหรืออ่านจากไฟล์
การซ้อมรบที่เป็นไปได้
คุณถูกติดตามโดย TIE-Fighters ดังนั้นคุณต้องก้าวไปข้างหน้าเสมอ ดังนั้นจึงมีสามวิธีที่เรือสามารถบินได้ในแต่ละขั้นตอน:
-
ข้างหน้า/
ไปข้างหน้าและเลี้ยวซ้าย\
ไปข้างหน้าและเลี้ยวขวา
ตัวอย่างเช่นเหล่านี้เป็นเส้นทางที่ถูกต้อง:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
อย่างที่คุณเห็นมีการเคลื่อนไหวหนึ่งครั้งต่อหนึ่งคอลัมน์ เหยี่ยวเป็นขยะชิ้นหนึ่งดังนั้นมันจึงไม่สามารถทำรุนแรงได้ ซึ่งหมายถึงการเคลื่อนไหวเช่น/\
หรือ\/
จะไม่ได้รับอนุญาต จะต้องมีอย่างน้อยหนึ่งบริสุทธิ์ไปข้างหน้า-
ระหว่างสองรอบที่ตรงกันข้าม ในทางกลับกันการหมุนทางเดียวสำหรับหลายขั้นตอนในแถวสามารถทำได้ตามที่เห็นด้านบน
เหยี่ยวฟอลคอนล่มหากการเคลื่อนไหวครั้งหนึ่งนำพาให้เรืออยู่ในจุดที่มีสิ่งกีดขวาง ตัวอย่างเช่นการเคลื่อนไหวเหล่านี้นำไปสู่การล่ม:
@-#
@
\
#
#
/
@
โปรดทราบว่านี่ไม่ใช่ความผิดพลาด:
@-#
\
-
เอาท์พุต
คุณต้องส่งออก ASCII ของดาวเคราะห์น้อยเช่นเดียวกับเส้นทางที่ถูกต้องไปยังจุดสิ้นสุด เหยี่ยวจะต้องพิมพ์ที่จุดสิ้นสุดแทนจุดเริ่มต้น
ตัวอย่างเช่นเอาต์พุตที่ถูกต้องสำหรับตัวอย่างอินพุตที่กำหนดก่อนหน้าจะเป็น:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
เส้นทางของคุณต้องไม่ให้เหยี่ยวชนเท่านั้น ไม่จำเป็นต้องเป็นเส้นทางที่สั้นที่สุด
คุณสามารถสันนิษฐานได้ว่าจะมีเส้นทางที่เป็นไปได้อย่างน้อยหนึ่งเส้นทางไปยังจุดสิ้นสุด
คุณสามารถส่งออกไปยัง STDOUT ในไฟล์หรือสิ่งที่เทียบเท่าตราบเท่าที่ฟิลด์ดาวเคราะห์น้อยถูกพิมพ์อย่างที่พวกเขาอยู่ในโพสต์นี้ (เช่นการแสดงรายการของพิกัดสำหรับเส้นทางไม่ถูกต้อง)
กรณีทดสอบ
ฟิลด์ดาวเคราะห์น้อยปกติ
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
ผลลัพธ์ที่เป็นไปได้
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
ฟิลด์ดาวเคราะห์น้อยหลายมิติ
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
ผลลัพธ์ที่เป็นไปได้
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
แกนกลางของดาวมรณะ
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
ผลลัพธ์ที่เป็นไปได้
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
สลักดาวมรณะ
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
เอาท์พุต
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
ถ้ำดาวเคราะห์น้อย
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
ผลลัพธ์ที่เป็นไปได้
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
เกณฑ์การให้คะแนน
R2D2 กำลังยุ่งอยู่กับการว่ายน้ำในหนองน้ำดังนั้นคุณจะต้องเขียนโปรแกรมควบคุม Falcon ด้วยตัวเองซึ่งน่าเบื่อ ดังนั้นที่สั้นที่สุดชนะรหัส
-
อยู่ในเส้นทางในแต่ละเทิร์นซึ่งถูกกำหนดให้เป็นการเคลื่อนที่แบบ "ไปข้างหน้า" แต่การเคลื่อนไหวที่เกิดขึ้นจริงนั้นจะอยู่ทางซ้ายสองเส้นทแยงมุมเสมอตามด้วยขวาสองเส้นทแยงมุม