พื้นหลัง
คุณตื่นขึ้นมาเพื่อพบว่าตัวเองหลงทางในเขาวงกตหนึ่งมิติ! มารลึกลับ (หรือบางอย่าง) ปรากฏขึ้นและอธิบายว่าทางออกอยู่ข้างหน้าคุณ แต่ระหว่างคุณกับทางออกนั้นเป็นความท้าทาย เมื่อคุณเดินไปข้างหน้าคุณจะพบว่าความท้าทายที่เรียกว่าทั้งหมดเป็นเพียงประตูที่ถูกล็อค ก่อนอื่นคุณจะเห็นประตูที่มีรูกุญแจรูปตัวทีและไม่มีกุญแจดังกล่าวทำตามขั้นตอนของคุณอีกครั้งมองหากุญแจที่มี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$จะไม่ฟุ่มเฟือยอย่างใดอย่างหนึ่ง ;)