Per quelli di voi che non hanno familiarità, Kirkman's Schoolgirl Problem è il seguente:
Quindici giovani donne in una scuola escono tre di seguito per sette giorni consecutivi: è necessario organizzarle quotidianamente in modo che nessuna due passi due volte di seguito.
Potremmo guardare a questo come un nidificato 3 da 5 lista (o matrice):
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
In sostanza, l'obiettivo del problema originale è quello di capire 7 modi diversi per disporre la matrice sopra in modo che due lettere non condividano mai una riga più di una volta . Da MathWorld (collegato sopra), troviamo questa soluzione:
[[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]]
E se ci fosse un numero diverso di studentesse? Potrebbe esserci un ottavo giorno? † Questa è la nostra sfida.
† In questo caso no †† , ma non necessariamente per altre dimensioni dell'array
†† Possiamo facilmente mostrarlo, poiché a
appare in fila con ogni altra lettera.
La sfida:
Dato un input di dimensioni (righe, di colonne) di una matrice di studentesse (cioè 3 x 5
, 4 x 4
o [7,6]
, [10,10]
ecc), uscita la più grande possibile di "giorni che si adattano ai requisiti sopra specificati.
Input:
le dimensioni dell'array schoolgirl (qualsiasi modulo di input ragionevole che desideri).
Output:
la più grande serie possibile di array che soddisfano i requisiti di cui sopra (qualsiasi forma ragionevole).
Casi test:
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.
* Grazie a @Frozenfrank per aver corretto il caso di test 3 : se esiste solo una colonna, può esserci solo un giorno, poiché l'ordine delle righe non ha importanza.
Questa è una competizione di code-golf : vince la risposta più breve.