Für diejenigen von Ihnen, die nicht vertraut sind, lautet Kirkmans Schulmädchen-Problem wie folgt:
Fünfzehn junge Damen in einer Schule gehen sieben Tage hintereinander drei Mal hintereinander aus dem Haus. Es ist erforderlich, sie täglich so zu arrangieren, dass keine zwei Frauen zweimal hintereinander gehen.
Wir könnten wie ein verschachtelten Blick auf diesem 3 von 5 Liste (oder Matrix):
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
Im Wesentlichen besteht das Ziel des ursprünglichen Problems darin, sieben verschiedene Möglichkeiten zum Anordnen der obigen Matrix herauszufinden, sodass zwei Buchstaben eine Zeile nie mehr als einmal teilen . Von MathWorld (oben verlinkt) finden wir diese Lösung:
[[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]]
Was wäre, wenn es eine andere Anzahl von Schulmädchen gäbe? Könnte es einen achten Tag geben? † Das ist unsere Herausforderung.
† In diesem Fall nicht †† , aber nicht unbedingt für andere Array-Dimensionen
†† Wir können dies leicht zeigen, da a
in einer Reihe mit jedem anderen Buchstaben erscheint.
Die Herausforderung:
Angesichts eine Eingabe von Abmessungen (Zeilen als Spalten) aus einer Anordnung von Schülern (dh 3 x 5
, 4 x 4
oder [7,6]
, [10,10]
usw.), Ausgang der größtmögliche Menge von ‚Tagen‘, die die Anforderungen passen oben spezifizierten.
Eingabe:
Die Abmessungen für das Schülerinnen-Array (jede sinnvolle Eingabeform, die Sie wünschen).
Ausgabe:
Die größtmögliche Reihe von Arrays, die die oben genannten Anforderungen erfüllen (jede sinnvolle Form).
Testfälle:
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.
* Dank an @Frozenfrank für die Korrektur von Testfall 3 : Wenn es nur eine Spalte gibt, kann es nur einen Tag geben, da die Zeilenreihenfolge keine Rolle spielt.
Dies ist ein Code-Golf- Wettbewerb - die kürzeste Antwort gewinnt.