งาน
เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้โครงสร้างการแยกการจราจรและเรียงลำดับผลลัพธ์ซึ่งยานพาหนะจะผ่าน
เอาท์พุทควรมีที่มากที่สุดสี่เส้นที่มีรูปแบบต่อไป#. x->y\n
ซึ่ง#
เป็นจำนวนที่หมายเลขลำดับตามด้วยจุด.
, x
และตัวละครy
พวกเขาควรจะแยกออกจากกันโดยตัวละคร["N", "E", "S", "W"]
->
หากคุณไม่ส่งคืนอาเรย์ของสตริงแต่ละบรรทัดต้องลงท้ายด้วย\n
(อักขระบรรทัดใหม่) หรือเทียบเท่ากับระบบของคุณ
อินพุตควรใช้แบบฟอร์มต่อไปนี้:
- ส่วนที่ 1: อักขระสี่ตัวแต่ละตัวมีถนนปลายทางสำหรับถนนต้นทางตามลำดับ N, E, S, W (ตามเข็มนาฬิกา) ตัวละครที่ได้รับอนุญาตมี
N
,S
,W
, หรือE
อวกาศหมายความว่าไม่มียานพาหนะบนถนนโดยเฉพาะ ตัวอย่างเช่นสายอักขระ
S WE
หมายความว่ายานพาหนะ N ปรารถนาที่จะไปทางทิศใต้พื้นที่หมายความว่าไม่มียานพาหนะ EW
หมายถึงว่า S ประสงค์ที่จะไปทางตะวันตกE
หมายความว่าตะวันตกต้องการที่จะไปทางตะวันออก - ส่วนที่ 2 - ช่องว่างหรือตัวอักษรเดี่ยวหมายถึงอันที่หนึ่งของยานพาหนะฉุกเฉิน
- ส่วนที่ 3 - อักขระสองตัวที่กำหนดว่าถนนสองสายใดมีลำดับความสำคัญสูง (เช่น
NE
หมายความว่าทิศเหนือและทิศตะวันออกมีลำดับความสำคัญสูงกว่าทั้งใต้และตะวันตก) ถ้ามันง่ายกว่าสำหรับคุณคุณอาจใช้ถนนที่มีลำดับความสำคัญต่ำกว่า (ในกรณีนี้SW
)
ในสถานการณ์ที่แก้ไม่ได้รับอนุญาตให้กลับสตริงหนึ่งบรรทัดซึ่งเป็นที่ชัดเจนให้กับผู้ใช้เช่นunsolvable
, no solution
และที่คล้ายกัน ผู้ใช้ JavaScript อาจมีundefined
ค่าคงที่ในตัว
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
กฎจราจร
โปรดทราบว่ากฎบางข้ออาจไม่ปฏิบัติตามกฎจราจรในประเทศของคุณ บางคนได้รับการทำให้เรียบง่ายเพื่อให้การท้าทายง่ายขึ้น อย่าใช้คำถามนี้เป็นแนวทางสำหรับระบบการจราจรในชีวิตจริง
- สำหรับความท้าทายที่คุณได้รับอนุญาตให้ใช้การจราจรทางด้านขวาเท่านั้น
- สี่แยกการจราจรประกอบด้วยถนนสี่สายที่พบในจุดเดียว พวกเขามีการทำเครื่องหมาย
N
(เช่นเดียวกับS
"นอร์ท")W
,E
, ควรใช้ตัวอักษรเหล่านี้แทนx
และy
ในตัวอย่างผลลัพธ์ด้านบน
- ในแต่ละถนนมียานพาหนะไม่เกินหนึ่งคัน ไม่รับประกันว่าจะมียานพาหนะในแต่ละถนน ยานพาหนะแต่ละคันสามารถขับได้สี่ทิศทางคือ เลี้ยวซ้ายเลี้ยวขวาตรงไปหรือกลับรถ
- หากเส้นทางของยานพาหนะสองคันไม่ตัดกัน (พวกเขาไม่ชนกัน) พวกเขาสามารถไปในเวลาเดียวกันได้ เส้นทางไม่ชนกันหากรถสองคัน (รายการอาจไม่สมบูรณ์ แต่นี่เป็นเจตนาเพียงเพื่อให้เบาะแสคุณ):
- มาจากทิศทางตรงข้ามและทั้งคู่เดินตรงหรืออย่างน้อยหนึ่งคนเลี้ยวขวา
- มาจากทิศทางตรงข้ามและเลี้ยวซ้าย
- มาจากทิศทางตรงกันข้ามและหนึ่งในนั้นหันไปในทิศทางใดก็ได้หรือทำให้กลับรถในขณะที่อีกคนหันกลับ
- มาจากทิศทางมุมฉากคนหนึ่งไปทางซ้ายกำลังเลี้ยวขวาและคนอื่น ๆ ไม่ได้กลับรถ
ตัวอย่างของเส้นทางที่ไม่ชนกันด้านล่าง โปรดทราบว่าในการวาดครั้งที่สามเส้นทางใด ๆ ของ N จะชนกับเส้นทางของ E แม้ว่า N จะเลี้ยวกลับ
- หากสองพา ธ ชนกันจำเป็นต้องใช้กฎอื่น หากยานพาหนะสองคันอยู่บนถนนที่มีลำดับความสำคัญเท่ากัน (ดูด้านล่าง) จะมีการมอบทางด้านขวาให้กับรถที่:
- มาจากถนนทางด้านขวาหากพวกเขามาจากทิศทางมุมฉาก
- เลี้ยวขวาหากเลี้ยวซ้ายอีกทาง
- ไปทางตรงหรือเลี้ยวขวาหากอีกทางหนึ่งกลับรถ
ในตัวอย่างทั้งสองด้านล่างยานพาหนะ E มีสิทธิ์เหนือยานพาหนะ S
ในตัวอย่างด้านล่างแรกไป W จากนั้น N จากนั้น E และสุดท้ายไป S
สำหรับกรณีนี้ผลลัพธ์ของโปรแกรมของคุณควรเป็น:
1. W->S
2. N->S
3. E->S
4. S->S
ผู้ขับขี่ทุกคนใช้สัญญาณเลี้ยวและรู้ว่าคนอื่น ๆ ต้องการไปที่ใด (เพื่อความง่ายเราคิดว่าเป็นไปได้ที่จะแยกความแตกต่างระหว่างเลี้ยวซ้ายและกลับรถ)
บางครั้งถนนจะได้รับป้ายบอกลำดับความสำคัญซึ่งสำคัญกว่ากฎข้างต้น ถนนที่มีลำดับความสำคัญสูงกว่าจะมีสัญลักษณ์ลำดับความสำคัญ ( ภาพของลำดับความสำคัญ ) ถ้าถนนมีความสำคัญไม่ได้ตรงไปยังสัญญาณเพิ่มเติมจะนำมาใช้เช่นนี้ ถนนที่มีลำดับความสำคัญต่ำกว่าจะมีสัญญาณให้ผลผลิตหรือเครื่องหมายหยุด (เทียบเท่ากัน) ถนนที่แตกต่างกันสองสายไม่ว่าจะมีลำดับความสำคัญสูงกว่า ผู้ใช้โปรแกรมของคุณควรสามารถเข้าสู่ถนนที่มีลำดับความสำคัญสูงกว่า (หรือต่ำกว่า)
- ยานพาหนะที่มาจากถนนที่มีลำดับความสำคัญสูงกว่ามีสิทธิ์เหนือยานพาหนะที่มาจากถนนที่มีลำดับความสำคัญต่ำกว่าแม้ว่าจะอยู่ทางด้านซ้าย
- หากเส้นทางของยานพาหนะสองคันที่มาจากถนนที่มีลำดับความสำคัญเท่ากันมีการชนกันด้านบนกฎด้านขวาจะทำงาน
ในตัวอย่างด้านล่างถนน S และ W มีสัญญาณลำดับความสำคัญซึ่งหมายความว่ายานพาหนะใน N และ E ควรให้ทางแก่พวกเขา รถ S มีลำดับความสำคัญเหนือกว่ารถ W เพราะมันอยู่ทางด้านขวาดังนั้นก่อนอื่น จากนั้นไปทาง W เพราะอยู่บนถนนที่มีลำดับความสำคัญสูงกว่า E ยานพาหนะ N มีทางเดินที่ถูกต้องจาก E เนื่องจากอยู่ทางด้านขวา เป็นคนสุดท้ายที่ไป E
สำหรับกรณีนี้ผลลัพธ์ของโปรแกรมของคุณควรเป็น:
1. S->W
2. W->N
3. N->S
4. E->W
- เป็นไปได้ว่ารถยนต์หนึ่งคัน (และไม่มีอีก) เป็นยานพาหนะฉุกเฉินซึ่งมีลำดับความสำคัญโดยไม่คำนึงถึงทิศทางที่มาจากหรือไปที่และสิ่งที่ลงชื่อว่ามี (มันจะไปก่อนเสมอ) โปรแกรมควรอนุญาตให้ผู้ใช้ป้อนรถคันใดเป็นพาหนะฉุกเฉิน เมื่อพิจารณาว่าในตัวอย่างสุดท้าย N เป็นยานพาหนะฉุกเฉิน N ไปก่อนจากนั้น S, W และเป็น E สุดท้าย
สำหรับกรณีนี้ที่มียานพาหนะฉุกเฉินที่ N ผลลัพธ์ของโปรแกรมของคุณควรเป็น:
1. N->S
2. S->W
3. W->N
4. E->W
- หากยานพาหนะสองคันได้รับอนุญาตให้ไปในเวลาเดียวกัน (เส้นทางของพวกเขาไม่ได้ชนกันและพวกเขาไม่ต้องให้ยานพาหนะคันอื่น) โปรแกรมของคุณควรค้นหาสิ่งนี้และส่งพวกเขากลับมาโดยมีหมายเลขลำดับเดียวกัน
ในตัวอย่างด้านล่างเส้นทางของ N และ E เช่นเดียวกับ E และ S หรือ W และ E ไม่ชนกัน เนื่องจาก S ต้องหลีกทางให้กับ N และ W ให้ทางแก่ S, S จึงไม่สามารถไปพร้อม ๆ กันกับ E ได้ ฯลฯ The N และ E ทำได้ ดังนั้นในตอนแรก N และ E ไปด้วยกันดีกว่าไป S และ W เป็นคนสุดท้าย
ผลลัพธ์ที่เหมาะสมของโปรแกรมของคุณควรเป็น:
1. N->W
1. E->E
2. S->W
3. W->N
คุณมีอิสระในการเลือกลำดับของบรรทัด
1
(N->W / E->E
เทียบเท่าE->E / N->W
)
- บางครั้งการรับส่งข้อมูลอาจนำไปสู่สถานการณ์ที่ไม่สามารถแก้ไขได้ซึ่งไม่อนุญาตให้ยานพาหนะไป ในชีวิตจริงจะได้รับการแก้ไขเมื่อผู้ขับขี่คนหนึ่งลาออกโดยสมัครใจจากทางขวาของเขา ที่นี่โปรแกรมของคุณควรแสดงผล
unsolvable
ฯลฯ ตามที่กล่าวไว้ในส่วนแรกของคำถามด้านล่างเป็นตัวอย่างของสถานการณ์ที่ไม่สามารถแก้ไขได้ E ควรให้ทางไป W, W ควรให้ทางไป S และ S ควรให้ทางไป E