다른 이름 : ChessMoveQ
각각 4 개의 요소로 구성되는 최대 32 개의 요소 목록과 4 개의 요소로 구성된 두 번째 목록이 제공되면 두 번째 입력에 자세히 설명 된 이동이 유효한 체스 이동인지 판별하십시오.
첫 번째 목록은 보드에서 32 개 조각의 위치를 나타냅니다. 각 요소의 구성을 따를 <colour>, <piece-name>, <x-coord>, <y-coord>
같은 ["W", "K", 5, 1]
흰색 왕에 있음을 나타내는, 5, 1
( e1
통상 체스 보드). 첫 번째 입력의 모든 요소는 고유합니다. <x-coord>
그리고 <y-coord>
항상 한 가지 예는 것 1과 8 사이에있을 것입니다 :
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8],
["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7],
["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7],
["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3],
["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1],
["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2],
["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
보드를 나타냅니다 :
두 번째 입력은 첫 번째 입력의 하위 목록과 동일한 구조로 구성되지만 조각이있는 위치를 나타내는 x 및 y 좌표 대신 이동하려는 위치를 나타냅니다.
위의 예에서, 유효한 이동은 ["W", "B", 4, 3]
(주교가 한 칸 앞으로 왼쪽으로 이동), ["B", "R", 4, 1]
루크가 기사를 통해 이동해야하고 폰이 사각형으로 이동하는 것처럼 유효하지 않은 이동이 될 수 있습니다 . 이동이 시간에 여러 조각으로 참조 할 수, 당신은 여부를 테스트해야합니다 모든 지정된 조각이 이동, 그 중 단지 하나를 만들 수 있습니다. 예를 들어, 첫 번째 예는 한 주교에게만 유효하지만 여전히 유효한 이동입니다. 그러나 블랙 루크가 두 번째 이동을 수행 할 수 없으므로 유효하지 않습니다.
당신의 임무는 두 번째 입력에서 자세하게 이동이 유효한 체스 이동인지 확인하는 것입니다. 규칙의 유효성은 이동하려는 조각에 따라 다릅니다 (유효한 이동 다이어그램을 보려면 조각 이름을 클릭하십시오).
- 어떤 조각 : 다른 사각형의 조각이 차지하지 않는 한 조각은 이미 채워진 사각형으로 이동하거나 보드 밖으로 이동할 수 없습니다. 예를 들어, 흰색 조각은 흰색 조각이 아닌 검은 조각이 차지하는 사각형으로 이동할 수 있습니다. 또한 기사를 제외한 다른 조각은 다른 조각에 의해 직접 방해되는 사각형으로 이동할 수 없습니다.
- 조각 별 움직임 B 제곱 C는 일체형으로 "직접 차단"되어 경우 A는 간에, 직선 (직교 또는 대각선) 라인에 바로 B 및 C .
- 어떤 조각 : 왕의 위치는 조각의 이동의 유효성에도 영향을 줄 수 있습니다. 이 두 조건 중 하나가 충족되면 이동이 유효하지 않은 것입니다.
- 멸종 위기에 처한 왕과 같은 쪽에서 조각을 움직여 왕이 확인하도록 노출 시키십시오. 이것은 반대편이 왕을 체크하기 위해 움직이는 것이 아니라 반대편이 아닌 조각이 움직일 경우에만 적용됩니다.
- 이 경우에 검사의 왕, 떠나 이 체크 밖으로 이동합니다. 따라서 왕이 점검 중이고 이동이 다른 조각이 움직 이도록 지시하는 경우 다른 조각이 검사를 방해 하지 않는 한 잘못된 이동 입니다. 조각은 두 가지 방법 중 하나를 통해 검사를 방지 할 수 있습니다. 조각을 수행하는 조각을 확인하거나 조각을 수행하는 조각과 왕 사이의 경로를 방해합니다.
- "체크 (check)"는 왕의 상대방이 자신의 차례에 합법적으로 조각을 움직일 수있는 상황이다. 이 규칙은 재귀 적으로 적용되지 않습니다. 즉, 상대방이 그 왕으로 이동하면 자신의 왕을 확인하지 않아도 왕이 확인됩니다.
- 폰 : 폰은 빈 칸으로 한 칸 앞으로 움직일 수 있습니다 (즉, 흰색이면 위로, 검은면에는 아래로). 세 가지 특수 상황도 있습니다.
- 폰이 아직 이동하지 않은 경우 (Y 좌표를 사용하여이를 결정할 수 있으며, Y 좌표가 2 인 경우 흰색 폰이 이동하지 않았고, Y 좌표가 7 인 경우 검은 폰이 이동하지 않은 것) 폰 두 칸을 빈 칸으로 옮길 수 있습니다.
- 폰의 앞쪽에 대각선으로 상대방의 조각이있는 경우 (즉, 흰색이면 폰의 북서쪽 또는 북동쪽 사각형, 검은 색이면 남서쪽 또는 남동쪽 사각형) 폰은 해당 점령 광장으로 이동할 수 있습니다.
- 폰이 일반적인 체스 규칙에서 최종 Y 좌표 (흰색은 8, 검은 색은 1)로 이동하면 같은 색의 여왕, 루크, 기사 또는 주교에게 승진시켜야합니다. 이 질문의 목적 상, 승격의 선택은 이동이 유효한지 아닌지 (입력 형식으로 표현할 수 없는지)와 관련이 없지만, 승격을 초래할 폰 이동은 허용되어야합니다.
- 주교 : 주교는 연속적인 방해받지 않는 심근 간 (즉, 대각선) 경로를 따라 1에서 8 칸 사이를 이동할 수 있습니다.
- 기사 : 기사는
L
다음과 같은 (동등한) 움직임 중 하나로 구성된 모양으로움직일 수 있습니다.- 모든 기본 방향의 단일 정사각형, 90 / 270 ° 회전, 최종적으로 2 정사각형 이동.
- 기본 방향으로 2 칸, 90/270도 회전 한 후, 1 칸 앞으로 이동합니다.
- 루크 : 루크는 연속적인 장애물이없는 기본 경로를 따라 1에서 8 칸 사이를 이동할 수 있습니다.
- Queens : Queens는 연속적인 추기경 또는 심근 간 (예 : 대각선) 장애물이없는 경로를 따라 1 ~ 8 개의 정사각형을 이동할 수 있습니다.
- 킹스 : 킹은 한 번에 한 칸만 움직일 수 있다는 점을 제외하고는 여왕처럼 움직입니다 (즉, 킹은 카디널 또는 대각선으로 인접한 칸으로 만 움직일 수 있습니다). 다시 말해, 당신은 왕을 점검하게하는 움직임을 만들 수 없습니다. 따라서 당신은 또한 왕을 체크 상태로 만들 수 없습니다.
체스의 규칙은 또한 "캐슬 링 (castling)"과 "엔 패넌트 (en passant)"라는 특별한 움직임을 포함합니다. 그러나 이러한 움직임의 합법성은 현재 위치뿐만 아니라 게임의 역사에 달려 있기 때문에 (캐스팅에 입력 형식에 맞지 않는 두 조각을 한 번에 이동해야하기 때문에) 이러한 움직임 중 어느 것도 고려하지 않아야합니다. 존재해야한다 (즉, 거세되거나 지나칠 행동은 불법으로 간주되어야한다).
이동의 유효성을 나타 내기 위해 두 가지 뚜렷한 결과를 출력 할 수 있으며 원하는 방법으로 입력 할 수 있습니다. 원하는 경우 위치에 대해 1- 인덱싱 대신 0- 인덱싱을 선택할 수도 있습니다. 이것은 code-golf 이므로 가장 짧은 코드가 승리합니다!
테스트 사례
Board
Move => Output (Reason)
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8], ["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7], ["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7], ["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3], ["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1], ["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2], ["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
["W", "R", 8, 2] => True (The rook on h1 can move forward one)
[['B', 'K', 6, 8], ['B', 'Q', 1, 7], ['B', 'N', 1, 3], ['B', 'N', 7, 1], ['B', 'B', 8, 8], ['B', 'B', 2, 5], ['B', 'R', 4, 3], ['B', 'R', 1, 5], ['B', 'P', 5, 5], ['B', 'P', 7, 2], ['B', 'P', 5, 7], ['B', 'P', 5, 6], ['B', 'P', 4, 4], ['W', 'K', 7, 3], ['W', 'Q', 3, 2], ['W', 'N', 4, 8], ['W', 'N', 7, 5], ['W', 'B', 1, 1], ['W', 'B', 8, 1], ['W', 'R', 1, 8], ['W', 'R', 3, 7], ['W', 'P', 8, 2], ['W', 'P', 6, 3], ['W', 'P', 4, 2], ['W', 'P', 1, 4], ['W', 'P', 8, 7]]
['W', 'N', 1, 5] => False (Neither knight to move to a5 from where they are)
[['B', 'K', 7, 3], ['B', 'Q', 2, 4], ['B', 'N', 5, 2], ['B', 'N', 1, 6], ['B', 'B', 7, 7], ['B', 'B', 1, 8], ['W', 'K', 7, 1], ['W', 'Q', 6, 1], ['W', 'N', 5, 6], ['W', 'N', 3, 3], ['W', 'B', 2, 2], ['W', 'B', 6, 5]]
['B', 'K', 8, 3] => False (The white bishop would put the king in check)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 5, 8] => False (The white queen currently has the king in check, and this move doesn't prevent that)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 7, 5] => True (The king is in check, and the knight blocks that)
[['B', 'K', 8, 3], ['B', 'Q', 6, 5], ['B', 'N', 7, 8], ['B', 'N', 3, 7], ['B', 'B', 4, 1], ['B', 'B', 1, 1], ['W', 'K', 7, 7], ['W', 'Q', 7, 1], ['W', 'N', 2, 2], ['W', 'N', 1, 3], ['W', 'B', 3, 5]]
['B', 'B', 2, 2] => True (takes the white knight)
[['B', 'K', 6, 1], ['B', 'Q', 6, 2], ['W', 'K', 8, 1]]
['B', 'Q', 7, 1] => True (Smallest checkmate possible, in terms of bounding box)
이 도전은 샌드 박스 였다. 설명없이 공표를 받았으므로 어쨌든 게시하기로 결정했습니다.