2
การเล่นกอล์ฟของเชลล์โกลบ
งานนี้คือการส่งออกเส้นทางที่สั้นที่สุดไปยังไฟล์หลังจากการขยาย glob เปลือกกลมคืออะไร? ในเชลล์ส่วนใหญ่คุณสามารถใช้*อักขระในพา ธ เพื่อแทนอักขระใด ๆ ที่ตำแหน่ง ตัวอย่างเช่นถ้าไดเรกทอรีfooมีไฟล์bar bazและasdfจากนั้นจะขยายไปยังfoo/b*foo/bar foo/baz ตอนนี้สมมติว่าไดเรกทอรีปัจจุบันมีไฟล์ชื่อihavealongnameและไม่มีอะไรอื่น หากฉันต้องการอ้างอิงไฟล์นี้ฉันอาจพิมพ์*ซึ่งจะแสดงเพียงไฟล์เดียวเท่านั้นแทนที่จะพิมพ์ชื่อเต็ม หากไดเรกทอรีมีไฟล์ชื่อialsohavealongnameฉันไม่สามารถทำได้*เพราะมันจะตรงกับไฟล์ทั้งสอง ih*ที่ผมจะต้องทำอย่างน้อย *รูปแบบยังสามารถใช้ได้กับการจับคู่ดังกล่าวข้างต้นไดเรกทอรีไฟล์ฉันกำลังมองหา หากมีเพียงสองไดเรกทอรีfooและbarแต่fooมีเพียงไฟล์bazและbarมีไฟล์asdfผมสามารถจับคู่กับfoo/baz หรือมากยิ่งขึ้นรัดกุม*/baz */b*ถ้าbarว่างเปล่า*/*จะทำงาน งานของคุณ: กำหนดสตริงของเส้นทางที่เป็นตัวแทนของ "ไดเรกทอรีปัจจุบัน" และเส้นทางเป้าหมายเดียวออกสตริงที่สั้นที่สุดที่เป็นไปได้ที่จะขยายไปยังเส้นทางเป้าหมายนั้นหลังจากขยาย * s เส้นทางเป้าหมายสามารถใช้เป็นสตริงของตัวเองเป็นดัชนีในอาร์เรย์ของเส้นทางเป็นรายการแรกในอาร์เรย์ของเส้นทางที่ส่งผ่านหรือวิธีที่สะดวกอื่น ๆ ที่ไม่ได้เข้ารหัสยาก ถามในความคิดเห็นหากไม่แน่ใจ เส้นทางเป้าหมายรับประกันว่าจะมีอยู่ใน "ไดเรกทอรีปัจจุบัน" คุณสามารถสันนิษฐานได้ว่าเส้นทางทั้งหมดมีเพียงตัวอักษรและตัวเลข ASCII (และ/) คุณอาจใช้เป็นเส้นทางอินพุตที่ถูกรูท (เริ่มต้นด้วย/) หรือญาติ (ไม่ได้ขึ้นต้นด้วย/) หากมีความเป็นไปได้สั้น ๆ หลายอย่างเท่ากันให้ส่งคืนสิ่งใดสิ่งหนึ่งหรือทั้งหมด นี่คือ รหัสกอล์ฟไบต์ที่น้อยที่สุดชนะ! กรณีทดสอบขอบคุณเควิน Cruijssen