여왕과 기사를 포함하는 잘 알려진 N- 퀸 문제의 변형이 있으며 "상당히 더 어렵다" 1 . 문제는 다음과 같습니다.
체스 판에 같은 수의 기사 ♞와 여왕 ♛를 놓아 조각이 다른 조각을 공격하지 않도록해야합니다. 보드에 놓을 수있는 최대 개수는 몇 개이며, 몇 가지 방법으로 할 수 있습니까?
이 코드 골프 챌린지에서는 3에서 32 사이 의 입력 n 이 제공됩니다 (언어에 가장 적합한 방식으로). 주어진 n 에 대해 위의 문제에 대한 해결책이 0 개 이상있을 수 있습니다. 해결책이 없으면 아무것도 출력 / 반환 하지 않아야합니다 ( nil , empty string , false , ...). 그렇지 않으면 두 가지 결과를 제공해야합니다.
- 크기 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
다른 종류의 빈 셀이있는 기호는, (내 대답은 아래 참조). Sleafar의 답변에서와 같이 n = 6에 2836 보드 를 계산합니다 (바이트 수를 줄일 때 버그가 발생했지만 지금은 수정되었습니다).
내 코드에서 하나 이상의 버그를 발견 한 Sleafar에게 감사드립니다.
점수
바이트 단위의 최단 코드가 이깁니다.
첫 번째 프로그램의 크기 인 n을 측정 합니다.
1 . Roger KW Hui의 Queens and Knights (솔루션 포함)
-------------------------N--------Q-
더 많은 조각을 추가 할 수 있기 때문에 유효하지 않음 :) Q--------N---------------N--------Q-
.