Dla tych z was, którzy nie są zaznajomieni, problem uczennicy Kirkmana wygląda następująco:
Piętnaście młodych kobiet w szkole wychodzi z domu trzy kolejne przez siedem dni z rzędu: należy je tak ustawiać codziennie, aby żadna z dwóch nie poszła dwa razy do przodu.
Możemy spojrzeć na to jak zagnieżdżoną listę 3 na 5 (lub macierz):
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
Zasadniczo celem pierwotnego problemu jest wymyślenie 7 różnych sposobów ułożenia powyższej matrycy, tak aby dwie litery nigdy nie dzieliły wiersza więcej niż jeden raz . W MathWorld (link powyżej) znajdujemy to rozwiązanie:
[[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]]
A gdyby tak była inna liczba uczennic? Czy może być ósmy dzień? † To jest nasze wyzwanie.
† W tym przypadku nie †† , ale niekoniecznie dla innych wymiarów tablicy
†† Możemy to łatwo pokazać, ponieważ a
pojawia się w rzędzie z każdą inną literą.
Wyzwanie:
Biorąc pod uwagę wejście wymiarów (wierszy niż kolumn) tablicy uczennic (czyli 3 x 5
, 4 x 4
czy [7,6]
, [10,10]
itp), wyjście największy możliwy zestaw „dni”, które odpowiadają wymaganiom określonym powyżej.
Dane wejściowe:
wymiary tablicy uczennicy (dowolna rozsądna forma wprowadzania, którą chcesz).
Wyjście:
największa możliwa seria tablic spełniająca powyższe wymagania (dowolna rozsądna forma).
Przypadki testowe:
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.
* Dzięki @Frozenfrank za poprawienie przypadku testowego 3 : jeśli jest tylko jedna kolumna, może być tylko jeden dzień, ponieważ kolejność wierszy nie ma znaczenia.
To zawody w golfa - wygrywa najkrótsza odpowiedź.
źródło
Odpowiedzi:
Mathematica, 935 bajtów
dotyczy to maksymalnie 26 kobiet
EDYCJA
Wprowadziłem kilka zmian i myślę, że to działa! Kod jest teraz ustawiony do rozwiązania [5,4] (co jest „problemem graczy w golfa społecznościowego”) i uzyskuje wynik w ciągu kilku sekund. Jednak [5,3] problem jest trudniejszy i będziesz musiał poczekać 10-20 minut, ale otrzymasz odpowiednią kombinację na wszystkie dni. W przypadku łatwiejszych przypadków jest to bardzo szybkie.
w każdym razie możesz wypróbować i zobaczyć wyniki
Wypróbuj online tutaj
skopiuj i wklej za pomocą ctrl-v
naciśnij shift + enter, aby uruchomić kod
możesz zmienić dane wejściowe na początku kodu -> Inp = {5,4}
uruchom koduj wiele razy, aby uzyskać różne permutacje
źródło
[5,3]
przypadku testowego, na którym opiera się cały problem. Ponadto można więcej grać w golfa; istnieje kilka nazw zmiennych, które są większe, niż muszą być, a niektóre funkcje można skrócić za pomocą@
notacji lub infiksu. Mam jednak nadzieję, że nadal będziesz pracować!914
. Gra powinna być golfowa do około 850.