Для тех из вас, кто незнаком, проблема школьницы Киркмана выглядит следующим образом:
Пятнадцать юных леди в школе выходят три в ряд в течение семи дней подряд: необходимо устраивать их ежедневно, чтобы двое не ходили дважды в ряд.
Мы можем посмотреть на это как вложенный список 3 на 5 (или матрицу):
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
По сути, цель исходной задачи состоит в том, чтобы найти 7 различных способов упорядочить вышеуказанную матрицу, чтобы две буквы никогда не разделяли строку более одного раза . Из MathWorld (ссылка выше) мы находим это решение:
[[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
появляются в ряду с каждой другой буквой.
Соревнование:
Учитывая ввод измерений (строк, чем столбцов) массива школьниц (то есть 3 x 5
, 4 x 4
или [7,6]
, [10,10]
и т. Д.), Выведите максимально возможный набор «дней», который соответствует требованиям, указанным выше.
Ввод:
Размеры для массива школьниц (любая разумная форма ввода, которую вы хотите).
Вывод:
максимально возможная серия массивов, отвечающая вышеуказанным требованиям (любая разумная форма).
Тестовые случаи:
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.
* Спасибо @Frozenfrank за исправление тестового примера 3 : если есть только один столбец, может быть только один день, поскольку порядок строк не имеет значения.
Это соревнование по коду-гольфу - выигрывает самый короткий ответ.
источник
Ответы:
Mathematica, 935 байт
это для 26 дам макс
РЕДАКТИРОВАТЬ
Я сделал некоторые изменения, и я думаю, что это работает! Код прямо сейчас решает [5,4] (что является «проблемой социальных игроков в гольф») и получает результат через несколько секунд. Однако проблема [5,3] сложнее, и вам придется подождать 10-20 минут, но вы получите правильную комбинацию на все дни. Для более простых случаев это очень быстро.
в любом случае, вы можете попробовать и посмотреть результаты.
Попробуйте
скопировать и вставить его онлайн, используя ctrl-v,
нажмите shift + enter, чтобы запустить код, который
вы можете изменить в начале кода -> Inp = {5,4}
запустить кодировать несколько раз, чтобы получить различные перестановки
источник
[5,3]
тесты , включая тестовый пример, на котором основана вся эта проблема. Кроме того, это может быть больше в гольфе; Есть несколько имен переменных, которые больше, чем они должны быть, и некоторые функции могут быть сокращены с помощью@
или инфиксной записи. Я надеюсь, что вы продолжите работать, хотя!914
. Это должно быть в гольф примерно до 850.