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.
quelle
Antworten:
Mathematica, 935 Bytes
Dies ist für 26 Damen max
BEARBEITEN
Ich habe einige Änderungen vorgenommen und denke, dass es funktioniert! Der aktuelle Code ist auf Lösung eingestellt [5,4] (das ist das "Problem der Social Golfer") und liefert das Ergebnis in wenigen Sekunden. Das [5,3] -Problem ist jedoch schwieriger und Sie müssen 10-20 Minuten warten, aber Sie erhalten für alle Tage die richtige Kombination. Für leichtere Fälle ist es sehr schnell.
trotzdem kann man es versuchen und sehen die Ergebnisse
Online ausprobieren hier
kopieren und Strg-V mit
drücken Shift + geben Sie den Code auszuführen
Sie den Eingang am Anfang des Codes ändern kann -> Inp = {5,4}
laufen die Code mehrmals, um verschiedene Permutationen zu erhalten
quelle
[5,3]
Testfalls, auf dem dieses ganze Problem basiert. Darüber hinaus kann dies mehr golfen werden; Es gibt mehrere Variablennamen, die größer sind, als sie sein müssen, und einige Funktionen können mit@
oder ohne Zusatznotation gekürzt werden. Ich hoffe, Sie werden trotzdem weiterarbeiten!914
. Es sollte bis zu 850 golfen werden können.