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.
sumber
Jawaban:
Mathematica, 935 byte
ini untuk 26 wanita maks
EDIT
Saya membuat beberapa perubahan dan saya pikir itu berhasil! Kode sekarang diatur untuk menyelesaikan [5,4] (yang merupakan "masalah pegolf sosial") dan mendapatkan hasilnya dalam beberapa detik. Namun [5,3] masalahnya lebih sulit dan Anda harus menunggu 10-20 menit tetapi Anda akan mendapatkan kombinasi yang tepat untuk semua hari. Untuk kasus yang lebih mudah, ini sangat cepat.
lagi pula Anda dapat mencobanya dan melihat hasilnya
Coba online di sini
salin dan tempel menggunakan ctrl-v
tekan shift + enter untuk menjalankan kode
Anda dapat mengubah input pada awal kode -> Inp = {5,4}
jalankan kode beberapa kali untuk mendapatkan permutasi yang berbeda
sumber
[5,3]
kasus uji yang menjadi dasar masalah ini. Selain itu, ini bisa lebih banyak golf; ada beberapa nama variabel yang lebih besar dari yang seharusnya, dan beberapa fungsi dapat disingkat@
atau ditambahkan notasi. Saya harap Anda akan tetap bekerja!914
. Seharusnya golf turun menjadi sekitar 850.