В игре в шахматы есть фигура, называемая королевой, которая может атаковать любую другую фигуру в том же ряду, столбце или диагонали. В шахматах обычно есть две стороны, черная и белая, причем каждая фигура принадлежит одной из команд. Части не могут атаковать фигуры, принадлежащие одной команде.
Ваша цель - найти самые большие мирные сосуществующие армии для квадратной доски. Это самое большое количество черно-белых королев, которые могут уместиться на доске, так что никакие две королевы не могут атаковать друг друга, а количество черных королев равно количеству белых королев.
В качестве входных данных вы получите длину стороны квадратной доски и должны вывести число размеров самых больших мирных сосуществующих армий, которые могут поместиться на этой доске.
Это код-гольф, поэтому применяются стандартные правила для тега.
Эти контрольные примеры охватывают все известные ответы. Ваше решение должно быть обобщенным ответом, который при достаточной вычислительной мощности и времени может вычислить решение для любого входного значения.
1: 0 2: 0 3: 1 4: 2 5: 4 6: 5 7: 7 8: 9 9:12 10: 14 11: 17 12: 21 13: 24
Ответы:
C, 476 байт, DFS, повторяющая белых королев, O (2 n 2 )
518 байт, DFS с обрезкой, O (2 n )
577 байт, DFS повторяет белые и черные королевы, O (?)
По сути, код перебирает возможности белой королевы и проверяет, может ли тогда быть размещена черная королева.
Таблица скорости (в секундах):
источник
Клинго , 90 байт
демонстрация
источник
Python 2 |
325284217 байтПопробуйте онлайн!
Редактировать: заменены кортежи с целыми числами в g и других тривиальных редактированиях.
Edit2: Байт до 217 благодаря musicman523 и CalculatorFeline !
Как это устроено
Программа перебирает все возможные позиции
n
королев и отфильтровывает немирные точки,g
вызванные положением королев. Если оставшиеся точки больше, чемn
тогда, это означает, чтоn
армии королевы могут оставаться мирно. Если для следующего значенияn
мирной ситуации не найдено, то программа завершает работу с кодом выхода:,n-1
который является ответом. Короче говоря, это грубая силаПрограмму можно сделать быстрее, изменив последние две строки на
источник
from module import*
для импорта всего из модуля и сохранения байтов.Haskell ,
169 156 153152 байтаОпределяет функцию
g
, может быть в дальнейшем пригоден для игры в гольф. Попробуйте онлайн! На TIO при компиляции с-O2
это занимает около 36 секунд при n = 4 и время ожидания при n = 5 . Временная сложность должна быть O (n 2 4 n 2 ) .объяснение
Мы перебираем возможные значения количества королев ( q ). Для каждого q мы генерируем все пары подмножеств размера q в [1..n] 2 , один набор черных королев ( b ) и одну из белых королев ( w ). Затем каждый элемент b сравнивается с каждым элементом w, чтобы узнать, имеют ли они общую строку, столбец, диагональ или антидиагональ. Это также заботится о двух частях с одинаковыми координатами. Наибольшее значение q, которое допускает мирную конфигурацию, является окончательным значением.
Первые две строки программы определяют функцию
!
, которая вычисляет длину-k
подпоследовательность спискаx
. Реализация осуществляется с помощью базовой рекурсии: либо выберите первый элемент в наборе, либо нет и вернитесь к хвосту, уменьшивk
при необходимости. Затем пустой список или достигнут, проверьте этоk==0
.Вторая вспомогательная функция
&
принимает числоq
(число ферзей с обеих сторон) и списокl
(x-координаты доски, также используемые в качестве y-координат) и возвращает логическое значение, указывающее, существует ли конфигурация с возможностью изменения мира. Сначала мы вычислимp
списокq
подпоследовательностей списка значений[x,y,x-y,x+y]
, гдеx
и вy
диапазонеl
. Они представляют собой строку, столбец, диагональ и анти-диагональ квадрата(x,y)
на доске.Далее у нас есть результат
q&l
. Мы рисуем две подпоследовательностиb
иw
изp
, пара 4-списки их вместе всеми возможными способами, и убедитесь , что они всегда отличаются во всех 4 -х координат. Если какой-то выборb
иw
приведет к правдивому результату, мы вернемсяTrue
.Последняя строка является основной функцией. Учитывая
n
, он просто находит максимально возможное значение,q
для которогоq&[1..n]
верно.источник