EDIT: Lihat Memecahkan Siapa pemilik Zebra secara terprogram? untuk kelas masalah serupa
Ada kategori masalah logika di LSAT yang berbunyi seperti ini:
Tujuh slot waktu berturut-turut untuk suatu siaran, diberi nomor urut kronologis I sampai 7, akan diisi oleh enam kaset lagu-G, H, L, O, P, S-dan tepat satu kaset berita. Setiap kaset akan ditempatkan pada slot waktu yang berbeda, dan tidak ada kaset yang lebih panjang dari kaset lainnya. Siaran ini tunduk pada batasan berikut:
L harus diputar segera sebelum O.
Kaset berita harus diputar beberapa waktu setelah L.
Harus ada tepat dua slot waktu antara G dan P, terlepas dari apakah G muncul sebelum P atau apakah G muncul setelah P.
Saya tertarik untuk membuat daftar permutasi yang memenuhi kondisi sebagai cara belajar untuk ujian dan sebagai tantangan pemrograman. Namun, saya tidak yakin kelas masalah permutasi apa ini. Saya telah menggeneralisasi masalah tipe sebagai berikut:
Diberikan array dengan panjang n A:
- Berapa banyak cara himpunan n benda unik dapat disusun dalam A? Misalnya. Ada berapa cara untuk menyusun ulang ABCDEFG?
- Jika panjang himpunan item-item unik lebih kecil dari panjang A, berapa banyak cara himpunan tersebut dapat disusun dalam A jika item-item dalam himpunan tersebut dapat muncul lebih dari satu kali? Misalnya. ABCDEF => AABCDEF; ABCCDEF, dll.
- Berapa banyak cara himpunan item unik dapat disusun dalam A jika item himpunan tersebut tunduk pada "kondisi pemblokiran"?
Pikiran saya adalah menyandikan batasan dan kemudian menggunakan sesuatu seperti itertools Python untuk menghasilkan permutasi. Pikiran dan saran dipersilakan.