คำนำที่เกี่ยวข้องกับเด็ก ๆ
เมื่อใดก็ตามที่ฉันพาลูก ๆ ไปที่สวนสนุกเด็ก ๆ จะรู้สึกประหม่ามากขึ้นเมื่อเราอยู่ใกล้กับสวนสาธารณะด้วยจุดสูงสุดของเส้นประสาทเมื่อเราอยู่ในลานจอดรถและไม่พบที่จอด ดังนั้นฉันจึงตัดสินใจว่าฉันต้องการวิธีในการหาพื้นที่จอดรถที่ใกล้ที่สุดเพื่อลดเวลาที่จอดรถให้น้อยที่สุด
คำแนะนำทางเทคนิค
ลองนึกภาพการเป็นตัวแทนของที่จอดรถแบบนี้:
*****************
* *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
* *
**********E******
ในการเป็นตัวแทนนี้หมาย*
ถึงกำแพงที่·
จอดรถฟรีE
จุดเข้าและC
รถที่จอดอยู่แล้ว ทุกช่องว่างเป็นตำแหน่งที่จอดรถสามารถใช้เพื่อเคลื่อนที่ไปรอบ ๆ ลานจอดรถ ตอนนี้เราจะขยายแนวคิดนี้เป็น 3D เพื่อสร้างที่จอดรถหลายระดับ:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
หมายเลข1
, 2
และ3
เป็นตัวแทนของการเชื่อมต่อระหว่างระดับ 1
จากชั้นแรกเชื่อมต่อกับ1
ในชั้นที่สองเพื่อให้ก้าวเข้าไปในรถของ1
ตำแหน่งในชั้นแรกจะปรากฏอยู่ใน1
ตำแหน่งในชั้นที่สอง
ท้าทาย
ให้รูปแบบของที่จอดรถเหมือนที่แสดงไว้ก่อนหน้านี้เขียนโปรแกรมที่สั้นที่สุดที่คำนวณระยะทางไปยังพื้นที่จอดรถฟรีที่ใกล้ที่สุดดังต่อไปนี้
กฎระเบียบ
- อินพุตจะเป็นอาร์เรย์ถ่าน 3D หรืออาร์เรย์สตริง 2D หรือเทียบเท่าและเอาต์พุตจะเป็นจำนวนเต็มเดียวที่แสดงถึงจำนวนขั้นตอนที่รถต้องดำเนินการเพื่อไปยังที่จอดรถฟรีที่ใกล้ที่สุด หากคุณได้รับอาร์เรย์ 3D ถ่านดัชนีแรกอาจแสดงถึงจำนวนชั้นและดัชนีที่สองและสามตำแหน่ง (x, y) สำหรับแต่ละชั้น แต่สิ่งนี้ขึ้นอยู่กับคุณ
- จะไม่มีมากกว่า 9
[1-9]
ลาดแสดงโดย - รถเริ่มจาก
E
ตำแหน่ง (จะมีเพียงหนึ่งจุดเข้าต่อแผนที่) และเคลื่อนที่ไปรอบ ๆ โดยใช้ช่องว่างในหนึ่งในสี่ทิศทางในแต่ละครั้ง: ขึ้นลงซ้ายซ้ายขวา รถยังสามารถก้าวเข้าสู่·
ตำแหน่งและ[1-9]
ตำแหน่ง - การเปลี่ยนตำแหน่ง (ขั้นตอน) ทุกครั้งจะนับเป็น 1 และทุกครั้งที่รถไปจากชั้นหนึ่งไปยังอีกชั้นหนึ่งนับเป็น 3 เนื่องจากรถจะต้องใช้ทางลาด ในกรณีนี้การเคลื่อนไหวจากช่องว่างข้าง a
1
ไปยัง1
ตัวของมันเองนั้นเป็นสิ่งที่นับว่าเป็น 3 ขั้นตอนเนื่องจากเป็นผลมาจากการเคลื่อนไหวนี้รถจะปรากฏขึ้นใน1
ตำแหน่งบนชั้นอื่น ๆ - รถไม่สามารถเกินขีด จำกัด เมทริกซ์ได้
·
นับจะสิ้นสุดเมื่อรถไปจอดอยู่ในตำแหน่งเดียวกับ หากไม่มีที่จอดรถฟรีที่สามารถเข้าถึงได้คุณสามารถคืนค่าศูนย์จำนวนเต็มลบค่าว่างหรือข้อผิดพลาด
ตัวอย่าง
ในตัวอย่างข้างต้นผลที่ได้จะเป็น 32, 3
เนื่องจากมีราคาถูกเพื่อไปยังชั้นที่สี่และจอดในที่จอดรถที่อยู่ใกล้ใกล้ ที่จอดรถฟรีที่ใกล้ที่สุดในชั้นสามอยู่ในระยะ 33 และ 34
ตัวอย่างอื่น ๆ :
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Answer: 28 (now the parking space in the 2nd floor is closer)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 4 2 5 3 6 *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
4 * 5 1 6 2 * 3
**********E****** ***************** ***************** *****************
Answer: 24 (now it's better to go to ramp 4 and then to ramp 5 to the third floor)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * * * 3 * 2
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 3 * 2 * 1
**********E****** ***************** ***************** *****************
Answer: 16 (now the parking space in the 4th floor is closer)
1st floor 2nd floor 3rd floor 4th floor 5th floor
************ ************ ************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC 3 *·CCCCCCCC 4 *········C *
* * * * * * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2 *··CCCCCCC 3 *·······CC 4
************ ************ ************ ************ ************
Answer: 29 (both the nearest parking spaces at the 4th and 5th floors are at the same distance)
1st floor 2nd floor 3rd floor
************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC *
* * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2
************ ************ ************
Answer: -1 (no free parking space)
1st floor
************
* *
* *
* E*
************
Answer: -1 (no parking space at all)
1st floor
************
* ····· *
*· ****
* ····· * E
*********
Answer: -1 (the parking lot designer was a genius)
ทางเลือก
- คุณสามารถใช้อักขระใดก็ได้ที่คุณต้องการเป็นตัวแทนแผนที่ที่จอดรถเพียงระบุคำตอบของคุณซึ่งเป็นตัวละครที่คุณเลือกและความหมายของมัน
นี่คือโค้ดกอล์ฟดังนั้นโปรแกรม / วิธีการ / แลมบ์ดาที่สั้นที่สุด / ทุก ๆ ภาษาจะชนะ!
หากคุณต้องการความช่วยเหลือเกี่ยวกับขั้นตอนวิธีการโปรดตรวจสอบของฉัน (ungolfed) การดำเนินการใน C #