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.
la source
Réponses:
Mathematica, 935 octets
c'est pour 26 dames max
EDIT
J'ai fait quelques changements et je pense que ça marche! Le code est actuellement réglé pour résoudre [5,4] (qui est le "problème des golfeurs sociaux") et obtient le résultat en quelques secondes. Cependant, le problème [5,3] est plus difficile et vous devrez attendre 10-20 minutes mais vous obtiendrez une bonne combinaison pour tous les jours. Pour les cas plus faciles, c'est très rapide.
Quoi qu'il en soit, vous pouvez l'essayer et voir les résultats
Essayez-le en ligne ici
copiez et collez en utilisant ctrl-v
appuyez sur Maj + Entrée pour exécuter le code,
vous pouvez modifier l'entrée au début du code -> Inp = {5,4}
exécutez le coder plusieurs fois pour obtenir différentes permutations
la source
[5,3]
cas de test sur lequel repose tout ce problème. De plus, cela peut être joué davantage; il existe plusieurs noms de variables qui sont plus grands qu'ils ne devraient l'être, et certaines fonctions peuvent être raccourcies avec@
ou notation infixée. J'espère que vous continuerez à travailler!914
. Il devrait être jouable au golf à environ 850.