Pour ceux d'entre vous qui ne sont pas familiers, le problème des écolières de Kirkman se présente comme suit:
Quinze jeunes filles d'une école en sortent trois de front pendant sept jours consécutifs: il faut les organiser quotidiennement pour que deux ne marchent pas deux fois de suite.
Nous pourrions regarder cela comme une liste (ou matrice) imbriquée 3 par 5 :
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
Essentiellement, l'objectif du problème d'origine est de trouver 7 façons différentes d'organiser la matrice ci-dessus afin que deux lettres ne partagent jamais une ligne plus d'une fois . De MathWorld (lié ci-dessus), nous trouvons cette solution:
[[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]]
Et si le nombre d'écolières était différent? Pourrait-il y avoir un huitième jour? † C'est notre défi.
† Dans ce cas, non †† , mais pas nécessairement pour les autres dimensions du tableau
†† Nous pouvons facilement le montrer, car il a
apparaît dans une rangée avec une lettre sur deux.
Le défi:
Compte tenu des dimensions d' une entrée (lignes, que les colonnes) d'une matrice d'écolières (c. 3 x 5
, 4 x 4
ou [7,6]
, [10,10]
, etc.), la sortie la plus grande possible l' ensemble de « jours » qui correspondent aux exigences spécifiées ci - dessus.
Entrée:
Les dimensions du tableau d'écolière (toute forme d'entrée raisonnable que vous souhaitez).
Sortie:
La plus grande série possible de tableaux répondant aux exigences ci-dessus (toute forme raisonnable).
Cas de 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.
* Merci à @Frozenfrank d' avoir corrigé le cas de test 3 : s'il n'y a qu'une seule colonne, il ne peut y en avoir qu'un, car l'ordre des lignes n'a pas d'importance.
C'est une compétition de code-golf - la réponse la plus courte l'emporte.