Существует вариант хорошо известной проблемы N-ферзей, которая включает в себя королев и рыцарей и, как говорят, «значительно сложнее» 1 . Постановка проблемы заключается в следующем:
Вы должны разместить на шахматной доске равное количество рыцарей que и королев board, чтобы ни одна фигура не атаковала любую другую фигуру. Какое максимальное количество фигур вы можете разместить на доске, и сколько разных способов вы можете сделать это?
В этом код-гольф вызов, вам будет предоставлен входной п от 3 до 32 (в пути , который является наиболее подходящим для вашего языка). Для данного n может быть ноль или более решений вышеуказанной проблемы. Если решения не существует, вы должны ничего не выводить / не возвращать ( ноль , пустая строка , ложь , ...). В противном случае вы должны дать два результата:
- Доска решений (см. Ниже) для размера n, где невозможно добавить шахматную фигуру ферзя или рыцаря, не подвергая атаке какую-либо фигуру. Там должно быть равное количество королев и рыцарей .
- Источник запускаемой программы, который не принимает входные данные и дает (i) другое решение (или ничего ) для того же размера n в том же формате, а также (ii) другую программу для следующего решения (и т. Д. ...).
Обратите внимание, что:
- Последовательность программ никогда не должна возвращать одну и ту же плату дважды, она должна охватывать все возможные решения проблемы размера n и, в конечном итоге, должна завершаться (без вывода).
- Вы можете либо вернуть два значения, вернуть одно и напечатать другое, либо распечатать два возвращаемых значения.
- Однако , если вы печатаете и доску, и следующую программу, доску не следует рассматривать как часть следующей программы (я рекомендую печатать доску в комментарии или использовать как стандартный вывод, так и потоки ошибок).
- Возвращаемое значение должно быть строкой, а не замыканием.
Формат платы
- Доска - это квадрат размера n .
- Ячейка доски может быть пустой, королева или рыцарь.
- Вы должны выбрать различные значения для каждого типа ячеек (т.е. вы можете использовать другие символы, кроме Q, N при печати доски).
- Если вы возвращаете нестроковую доску, это должна быть упорядоченная коллекция из n 2 значений платы (например, матрица, вектор или список в мажорном порядке строки / столбца, ...).
Если вы печатаете доску, вы можете распечатать ее в квадрате или в виде линии. Например, доска решений размером 4 может быть напечатана следующим образом (пробелы не требуются; символы на ваше усмотрение):
Q - - - - - - - - - - - - - N -
Если вы чувствуете это, вы также можете вывести:
♛ · · · · · · · · · · · · · ♞ ·
... но этого достаточно
Q-------------N-
Не имеет значения, выполняете ли вы итерацию по ячейкам в мажорном порядке строк или столбцов, потому что существуют симметричные решения. Например, решения для n = 4:
Q------N-------- Q----------N---- Q------------N-- Q-------------N- -Q----------N--- -Q------------N- -Q-------------N --Q---------N--- --Q----------N-- --Q------------N ---QN----------- ---Q----N------- ---Q---------N-- ---Q----------N- ---NQ----------- ----Q------N---- ----Q----------N N------Q-------- -------QN------- -------Q----N--- ---N----Q------- -------NQ------- --------Q------N N----------Q---- ----N------Q---- -----------QN--- -N----------Q--- --N---------Q--- -------N----Q--- -----------NQ--- N------------Q-- --N----------Q-- ---N---------Q-- N-------------Q- -N------------Q- ---N----------Q- -N-------------Q --N------------Q ----N----------Q --------N------Q
Вы также можете посмотреть на решения для n = 5 как матрицы ; доски содержит #
, q
и n
символы, которые пустые клетки разных видов (см мой ответ ниже). Я считаю 2836 досок для n = 6 , как и в ответе Sleafar (я внес ошибку при уменьшении количества байтов, но теперь это исправлено).
Большое спасибо Sleafar за то, что он нашел не один, а две ошибки в моем коде.
Гол
Самый короткий код в байтах побеждает.
Мы измеряем размер первой программы, которая принимает n .
1 . Королевы и рыцари , Роджер К. Уи (будьте осторожны! Содержит решение)
-------------------------N--------Q-
, недопустимо, потому что можно добавить больше частей :) Q--------N---------------N--------Q-
.