Bagi Anda yang tidak terbiasa, Problem Schoolgirl Kirkman berbunyi sebagai berikut:
Lima belas wanita muda di sekolah berjalan tiga mengikuti selama tujuh hari berturut-turut: diperlukan untuk mengatur mereka setiap hari sehingga tidak ada dua yang berjalan dua kali mengikuti.
Kita bisa melihat ini seperti bersarang 3 oleh 5 daftar (atau matriks):
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
Pada dasarnya, tujuan dari masalah asli adalah untuk mencari tahu 7 cara berbeda untuk mengatur matriks di atas sehingga dua huruf tidak pernah berbagi baris lebih dari satu kali . Dari MathWorld (ditautkan di atas), kami menemukan solusi ini:
[[a,b,c] [[a,d,h] [[a,e,m] [[a,f,i] [[a,g,l] [[a,j,n] [[a,k,o]
[d,e,f] [b,e,k] [b,h,n] [b,l,o] [b,d,j] [b,i,m] [b,f,g]
[g,h,i] [c,i,o] [c,g,k] [c,h,j] [c,f,m] [c,e,l] [c,d,n]
[j,k,l] [f,l,n] [d,i,l] [d,k,m] [e,h,o] [d,o,g] [e,i,j]
[m,n,o]] [g,j,m]] [f,j,o]] [e,g,n]] [i,k,n]] [f,h,k]] [h,l,m]]
Sekarang, bagaimana jika ada jumlah siswi yang berbeda? Mungkinkah ada hari kedelapan? † Ini tantangan kita.
† Dalam hal ini tidak ada †† , tetapi belum tentu untuk dimensi array lain
†† Kami dapat dengan mudah menunjukkan ini, karena a
muncul berturut-turut dengan setiap huruf lainnya.
Tantangan:
Diberi masukan dimensi (baris, dari kolom) dari array siswi (yaitu 3 x 5
, 4 x 4
, atau [7,6]
,[10,10]
, dll), output set kemungkinan terbesar dari 'hari' yang sesuai dengan persyaratan yang ditentukan di atas.
Memasukkan:
Dimensi untuk array siswi (formulir input masuk akal yang Anda inginkan).
Keluaran:
Serangkaian array terbesar yang sesuai dengan persyaratan di atas (bentuk wajar apa pun).
Kasus uji:
Input: [1,1]
Output: [[a]]
Input: [1,2]
Output: [[a,b]]
Input:* [2,1]
Output: [[a]
[b]]
Input: [2,2]
Output: [[a,b] [[a,c] [[a,d]
[c,d]] [b,d]] [b,c]]
Input: [3,3]
Output: [[a,b,c] [[a,d,g] [[a,e,i] [[a,f,h]
[d,e,f] [b,e,h] [b,f,g] [b,d,i]
[g,h,i]] [c,f,i]] [c,d,h]] [c,e,g]]
Input: [5,3]
Output: [[a,b,c] [[a,d,h] [[a,e,m] [[a,f,i] [[a,g,l] [[a,j,n] [[a,k,o]
[d,e,f] [b,e,k] [b,h,n] [b,l,o] [b,d,j] [b,i,m] [b,f,g]
[g,h,i] [c,i,o] [c,g,k] [c,h,j] [c,f,m] [c,e,l] [c,d,n]
[j,k,l] [f,l,n] [d,i,l] [d,k,m] [e,h,o] [d,o,g] [e,i,j]
[m,n,o]] [g,j,m]] [f,j,o]] [e,g,n]] [i,k,n]] [f,h,k]] [h,l,m]]
There may be more than one correct answer.
* Terima kasih kepada @Frozenfrank untuk mengoreksi test case 3 : jika hanya ada satu kolom, hanya ada satu hari, karena urutan baris tidak masalah.
Ini adalah kompetisi kode-golf - jawaban terpendek menang.