เมื่อวันก่อนทีมของเราไปที่ห้องหลบหนี หนึ่งในปริศนาที่เกี่ยวข้องกับสวิทช์ทางกลหกตัวที่คุณต้องหาชุดที่ถูกต้องของการเปิดและปิดเพื่อปลดล็อคกล่องค่อนข้างเช่นนี้:
-v-v-v-
-v-v-v-
ในฐานะนักพัฒนาเราจึงตัดสินใจว่าจะมีประสิทธิภาพมากขึ้นในการลองชุดค่าผสม 2 ^ 6 = 64 หนึ่งชุดมากกว่าที่จะไขปริศนาได้ ดังนั้นเราจึงมอบหมายให้คนจนบางคนทำการนับเลขฐานสอง:
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
และอื่น ๆ
ความท้าทาย
เขียนโปรแกรมที่ให้สวิตช์ทั้งหมดอยู่ในตำแหน่งปิดเป็นสตริงที่จัดรูปแบบตามด้านบนจะสร้างชุดค่าผสมทั้งหมดของการเปิดและปิดในลำดับใด ๆ
คุณสามารถเขียนโปรแกรมเต็มหรือฟังก์ชั่น ดังนั้นโปรแกรมของคุณสามารถรับอินพุตผ่าน stdin ไฟล์หรือเป็นอาร์กิวเมนต์สตริงเดี่ยวและส่งคืนหรือพิมพ์เอาต์พุต หากส่งคืนผลลัพธ์อาจอยู่ในรายการ / array / etc มากกว่าสตริงเดียว หากเอาต์พุตเป็นสตริงเดี่ยวบอร์ดควรคั่นด้วยบรรทัดใหม่ (อนุญาตให้ขึ้นบรรทัดใหม่ได้)
สตริงอินพุตจะตรงกับ regex r'((-v)+-)(\n(-v)+-)*'
และเป็นตัวแทนหนึ่งบอร์ดที่ปิดสวิตช์ทั้งหมด ซึ่งหมายความว่าไม่มีกรณีใดเป็นศูนย์และสวิตช์จะจัดชิดซ้าย แต่ละแถวอาจไม่มีสวิตช์จำนวนเท่ากัน
บอร์ดเอาต์พุตแต่ละอันควรมีรูปแบบเดียวกันกับอินพุตยกเว้นว่าวีอาจถูกแทนที่ด้วย ^ ตามที่ต้องการ บอร์ดเอาต์พุตสามารถคั่นด้วยจำนวนบรรทัดใหม่ใด ๆ
เนื่องจากรันไทม์นั้นเป็นไปตามธรรมชาติ O (2 ^ n) ในจำนวนสวิตช์รหัสของคุณจะไม่ถูกทดสอบบนสวิตช์มากกว่า 10 ตัวในการจัดเรียงใด ๆ
นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดในจำนวนไบต์ชนะ
ตัวอย่างอินพุตและเอาต์พุต
การป้อนข้อมูล:
-v-
เอาต์พุตที่เป็นไปได้:
-v-
-^-
การป้อนข้อมูล:
-v-
-v-
เอาต์พุตที่เป็นไปได้:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
เนื่องจากเป็นเรื่องน่าเบื่ออย่างยิ่งที่จะตรวจสอบคำตอบของคุณสำหรับสวิตช์จำนวนมากขึ้นนี่คือสคริปต์ Python ในฐานะเครื่องมือตรวจสอบสติ (ฉันได้รวมตัวอย่างความเห็นออกในขณะนี้เพื่อสร้างเอาต์พุตที่คาดหวังจากอินพุตไฟล์ที่กำหนดในกรณีที่คุณต้องการกรณีทดสอบเพิ่มเติม) มันค่อนข้างยืดหยุ่นน้อยกว่าในแง่ของอินพุตและเอาต์พุตมากกว่าสเป็คโชคไม่ดี ใส่สายป้อนในไฟล์ที่ชื่อว่า 'อินพุทและเอาท์พุท newline-แยก (ขออภัยรายการไม่มีการจัดรูปแบบ) ในไฟล์ที่ชื่อว่า 'ส่งออก' python3 sanitycheck.py
ในไดเรกทอรีเดียวกันและเรียกใช้