แก้ไข: ดู การแก้ปัญหาใครเป็นเจ้าของ Zebra โดยทางโปรแกรม สำหรับปัญหาประเภทเดียวกัน
มีปัญหาตรรกะหมวดหมู่หนึ่งใน LSAT ที่มีลักษณะดังนี้:
เจ็ดช่วงเวลาติดต่อกันสำหรับการออกอากาศ เรียงตามลำดับเวลา I ถึง 7 จะเต็มไปด้วยเทปเพลงหกเทป ได้แก่ G, H, L, O, P, S และเทปข่าวหนึ่งรายการ แต่ละเทปจะต้องถูกกำหนดให้กับช่วงเวลาที่แตกต่างกัน และไม่มีเทปใดที่ยาวกว่าเทปอื่นๆ การออกอากาศอยู่ภายใต้ข้อจำกัดต่อไปนี้:
L จะต้องเล่นทันทีก่อน O.
เทปข่าวจะต้องเล่นในบางครั้งหลังจาก L.
จะต้องมีช่วงเวลาสองช่วงเวลาอย่างแน่นอนระหว่าง G และ P, โดยไม่คำนึงว่า G มาก่อน P หรือ G มาก่อน P
ฉันสนใจที่จะสร้างรายการการเรียงสับเปลี่ยนที่ตรงตามเงื่อนไขเพื่อใช้ในการศึกษาเพื่อทดสอบและเป็นความท้าทายด้านการเขียนโปรแกรม อย่างไรก็ตาม ฉันไม่แน่ใจว่านี่เป็นปัญหาการเรียงสับเปลี่ยนระดับใด ฉันได้สรุปปัญหาประเภทดังนี้:
รับอาร์เรย์ความยาว n A:
- ชุดของรายการที่ไม่ซ้ำกัน n รายการสามารถจัดเรียงภายใน A ได้กี่วิธี? เช่น. การจัดเรียง ABCDEFG ใหม่มีกี่วิธี?
- หากความยาวของชุดสิ่งของที่ไม่ซ้ำกันน้อยกว่าความยาวของ A จะสามารถจัดเรียงชุดภายใน A ได้กี่วิธีหากรายการในชุดอาจเกิดขึ้นมากกว่าหนึ่งครั้ง เช่น. ABCDEF => AABCDEF; ABBCDEF ฯลฯ
- ชุดไอเท็มที่ไม่ซ้ำสามารถจัดเรียงภายใน A ได้กี่วิธีหากไอเท็มในชุดอยู่ภายใต้ "เงื่อนไขการบล็อก"
ความคิดของฉันคือการเข้ารหัสข้อจำกัดแล้วใช้บางอย่างเช่น itertools ของ Python เพื่อสร้างการเรียงสับเปลี่ยน ยินดีรับฟังความคิดและข้อเสนอแนะ