พื้นหลัง
คุณตื่นขึ้นมาเพื่อพบว่าตัวเองหลงทางในเขาวงกตหนึ่งมิติ! มารลึกลับ (หรือบางอย่าง) ปรากฏขึ้นและอธิบายว่าทางออกอยู่ข้างหน้าคุณ แต่ระหว่างคุณกับทางออกนั้นเป็นความท้าทาย เมื่อคุณเดินไปข้างหน้าคุณจะพบว่าความท้าทายที่เรียกว่าทั้งหมดเป็นเพียงประตูที่ถูกล็อค ก่อนอื่นคุณจะเห็นประตูที่มีรูกุญแจรูปตัวทีและไม่มีกุญแจดังกล่าวทำตามขั้นตอนของคุณอีกครั้งมองหากุญแจที่มีT
รูปร่าง
ท้อแท้คุณพบซุปตัวอักษรของกุญแจอยู่บนพื้นดินซึ่งไม่ตรงกับประตูที่คุณเจอ ด้วยสกิลอัจฉริยะ (หรือ idiocy) คุณคิดว่าt
คีย์ตัวพิมพ์เล็กอาจจะสามารถใส่ในช่องได้หากคุณติดขัดในที่นั่นยากพอ ในขณะที่คุณเข้าใกล้ประตูโดยใช้t
กุญแจตัวพิมพ์เล็กในมือT
รูเรืองแสงสีเขียวและประตูจะละลายด้านหน้าของคุณ
ลงหนึ่งไปอีกมากมาย ...
ท้าทาย
เป้าหมายของการท้าทายนี้คือการทำเครื่องหมายว่ามีกี่ขั้นตอนที่คุณต้องออกจากเขาวงกต
การป้อนข้อมูลของความท้าทายนี้เป็นเขาวงกต: [A-Za-z^$ ]
หนึ่งสายที่มีเพียงตัวอักษร คำศัพท์:
^
- พื้นที่เริ่มต้น^
การป้อนข้อมูลจะมีตรงหนึ่ง$
- ทางออก (อิสระ!)$
การป้อนข้อมูลจะมีตรงหนึ่ง[A-Z]
- อักษรตัวใหญ่มีความหมายว่าประตู คุณสามารถผ่านประตูนี้ได้หากคุณได้รวบรวมกุญแจที่จำเป็นแล้ว[a-z]
- ตัวอักษรตัวพิมพ์เล็กหมายถึงกุญแจ คุณรวบรวมกุญแจเหล่านี้โดยการเดินไปยังพื้นที่ที่มีกุญแจ
จะมีตัวอักษรตัวใหญ่อย่างน้อยหนึ่งตัวในอินพุต หมายความว่าจำนวนประตูทั้งหมดจะอยู่ระหว่าง 0-26
ประตูทุกบาน[A-Z]
จะมีรหัสตัวพิมพ์เล็กที่ตรงกันหนึ่ง[a-z]
ตัว อาจมีช่องว่างจำนวนเท่าใดก็ได้ ( ) ในอินพุต
ประตูทุกบานจะอยู่ทางขวาของจุดเริ่มต้นและทางซ้ายของทางออก ดังนั้นจะไม่มีประตูฟุ่มเฟือย อินพุตทั้งหมดจะสามารถแก้ไขได้
ผลลัพธ์สำหรับความท้าทายนี้จะเป็นตัวเลขจำนวนขั้นตอนที่ใช้เพื่อออกจากเขาวงกต
ขั้นตอนวิธี
วิธีการที่เป็นระบบของคุณเพื่อออกจากสถานที่ที่น่าสังเวชนี้มีดังนี้:
- เริ่มต้นที่จุดเริ่มต้น (
^
) และก้าวไปข้างหน้า (ขวา) การรวบรวมคีย์ใด ๆ ที่คุณเจอ - เมื่อคุณเจอประตูถ้าคุณมีกุญแจที่ถูกต้องคุณจะเดินหน้าต่อไปที่ประตู หากคุณไม่มีคีย์ที่ถูกต้องคุณจะเดินถอยหลัง (ซ้าย) รวบรวมกุญแจที่คุณเจอจนกว่าคุณจะพบกุญแจสำหรับประตูล่าสุดที่คุณไม่สามารถเปิดได้
- เมื่อคุณรวบรวมกุญแจสำหรับประตูที่มีปัญหาในปัจจุบันคุณจะเลี้ยวกลับไปทางขวาและดำเนินการต่อไป
- ทำซ้ำขั้นตอนนี้จนกว่าคุณจะไปที่ทางออก (
$
)
นักกอล์ฟที่มีประสบการณ์จะเข้าใจว่ารหัสของคุณไม่จำเป็นต้องใช้อัลกอริทึมเฉพาะนี้ตราบใดที่ผลลัพธ์นั้นเหมือนกันกับว่าคุณใช้อัลกอริทึมนี้
นับ
ทุกครั้งที่คุณก้าวจากสี่เหลี่ยมหนึ่งไปยังอีกสี่เหลี่ยมจัตุรัสนั่นจะนับเป็นหนึ่งก้าว การหมุน180ºไม่มีขั้นตอนเพิ่มเติม คุณไม่สามารถก้าวไปข้างหน้าสู่ประตูโดยไม่ต้องใช้คีย์ที่จำเป็น คุณต้องก้าวเข้าสู่กุญแจเพื่อหยิบมันขึ้นมาและต้องก้าวเข้าสู่ทางออกเพื่อให้ชนะ หลังจากย้ายครั้งแรกพื้นที่เริ่มต้น ( ^
) จะทำงานเหมือนกับพื้นที่ปกติอื่น ๆ
ตัวอย่าง
ในตัวอย่างเหล่านี้ฉันได้เว้นช่องว่างไว้เป็นขีดล่างเพื่อให้มนุษย์สามารถอ่านได้
_a_^_A__$__
การป้อนข้อมูลเป็น 11
เอาท์พุทเป็น คุณ1
ก้าวไปข้างหน้าสังเกตว่าคุณไม่มีกุญแจสำหรับA
ประตูและใบหน้า คุณเดินไปข้างหลังจนกว่าคุณจะครอบครองพื้นที่ที่มีa
( 3
ก้าวถอยหลังไปตอนนี้4
รวม) จากนั้นคุณเดินไปข้างหน้าจนกว่าคุณจะครอบครองพื้นที่ที่มีทางออก ( 7
ขั้นตอนไปข้างหน้า11
รวม)
b__j^__a_AJB_$
ป้อนข้อมูลเป็น ผลลัพธ์คือ41
คุณใช้การเดินทางสองทางแยกกันไปทางด้านหลังของเขาวงกตเพื่อให้ได้j
กุญแจและอีกอันถัดไปเพื่อรับb
กุญแจ
__m__t_^__x_T_MX_$____
การป้อนข้อมูลเป็น 44
เอาท์พุทเป็น คุณจะไม่เดินทางเพิ่มเพื่อรับx
กุญแจขณะที่คุณหยิบกุญแจขึ้นมาตั้งแต่ต้นจนT
จบ
g_t_^G_T$
การป้อนข้อมูลเป็น 12
เอาท์พุทเป็น คุณไม่สามารถย้ายไปยังG
พื้นที่ว่างได้โดยไม่ต้องใช้กุญแจ คุณโชคดีพอที่จะรับt
กุญแจระหว่างทางสู่g
กุญแจและเปิดประตูทั้งสองข้างเพื่อไปสู่อิสรภาพ
_^_____$
การป้อนข้อมูลเป็น 6
เอาท์พุทเป็น นั่นเป็นเรื่องง่าย
หลักเกณฑ์ I / O และเกณฑ์การชนะ
ใช้กฎ I / O มาตรฐาน นี่คือความท้าทายรหัส - กอล์ฟ
A
ในbA^aB$
จะไม่ฟุ่มเฟือยอย่างใดอย่างหนึ่ง ;)