代替名: ChessMoveQ
それぞれが4つの要素で構成される最大32個の要素のリストと、4つの要素を持つ2番目のリストが与えられた場合、2番目の入力で詳細な動きが有効なチェスの動きであるかどうかを判断します。
最初のリストは、ボード上の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]]
ボードを表します:
2番目の入力は、最初の入力のサブリストと同じ構造で構成されますが、x座標とy座標が作品の位置を示すのではなく、移動先を示します。
上記の例では、有効な移動は["W", "B", 4, 3]
(司教が1マスを左前方に移動する)であり、無効な移動は["B", "R", 4, 1]
、ルークがナイトとポーンを通過してスクエアに到達する必要がある場合です。移動は時々複数のピースを参照する可能性があるので、指定されたピースの1つだけではなく、いずれかが移動できるかどうかをテストする必要があります。たとえば、最初の例は1人の司教にのみ有効ですが、それでも有効な動きです。ただし、どちらの黒ルークも2番目の移動を実行できないため、無効です。
あなたの仕事は、2番目の入力で詳述された動きが有効なチェスの動きであるかどうかを判断することです。ルールの有効性は、移動しようとするピースによって異なります(有効な移動の図については、ピースの名前をクリックしてください)。
- 任意のピース:他の色のピースでそのスクエアが占有されていない限り、ピースはすでに占有されている正方形に移動したり、ボードから移動したりすることはできません。たとえば、白い部分は黒い部分で占められている正方形に移動できますが、白い部分では移動できません。さらに、騎士以外の駒は、他の駒によって直接遮られているマスに移動できません。
- ピースBから正方形Cへの移動は、AがBとCの間の直線(直交または斜め)に直接ある場合、ピースAによって「直接妨害」されます。
- 任意のピース:キングの位置は、ピースの動きの有効性にも影響を与える可能性があります。これらの2つの条件のいずれかが満たされている場合、移動は無効です。
- 絶滅の危機にある王と同じ側にある駒を動かすことにより、王をチェックするためにさらします。これは、反対側の駒がキングをチェックするために移動するのではなく、反対側の駒が移動する場合にのみ適用されます。
- それが、その場合には、チェック、で王を残しているチェックの外に移動すること。したがって、キングがチェック中にあり、その動きが別の駒の移動を指示する場合、他の駒がチェックを妨げていない限り、それは無効な動きです。ピースは、チェックを実行するピースを取得するか、チェックを実行するピースとキングとの間のパスを妨害するかの2つの方法のいずれかでチェックを防ぐことができます。
- 「チェック」とは、王の対戦相手が(移動する順番であれば)合法的にその王に駒を移動できる状況です。このルールは再帰的に適用されません。つまり、相手のキングがそのキングに移動しても自分のキングがチェックされたままになっても、キングはチェックされます。
- ポーン:ポーンは、1つの正方形から空いている正方形に向かって前方に移動できます(つまり、白の場合は上向き、黒の場合は下向き)。また、3つの特別な状況があります。
- ポーンがまだ移動していない場合(Y座標を使用してこれを決定できます。Y座標が2の場合、白いポーンは移動していません。Y座標が7の場合、黒いポーンは移動していません)、ポーン2つの正方形を空いている正方形に移動できます。
- ポーンの前に敵の駒がある場合(つまり、ポーンが白の場合はポーンの北西または北東の正方形、黒の場合は南西または南東の正方形)、ポーンは、問題の占有されている広場に移動できます。
- ポーンが通常のチェスルールで最終的なY座標(白の場合は8、黒の場合は1)に移動した場合、同じ色の女王、ルーク、騎士、または司教に昇格する必要があります。この質問の目的上、プロモーションの選択は、移動が有効かどうか(および入力形式で表現できない)には関係ありませんが、プロモーションをもたらすポーンの移動は許可する必要があります。
- 司教:司教は、連続した遮るもののない(つまり斜めの)パスに沿って1から8マスの間を移動できます。
- 騎士:騎士
L
は、次の(同等の)動きのいずれかで構成される形状で移動できます。- 任意の基本方向に1つの正方形があり、その後90/270°回転し、最後に2正方形前進します。
- 任意の基本方向に2マス、続いて90/270°回転し、1マスが最終的に前進します。
- ルーク:ルークは、障害物のない連続したパスに沿って1〜8マスの間を移動できます。
- クイーンズ:クイーンズは、連続する枢機orまたはinter間(つまり斜め)の遮られていないパスに沿って1から8マスの間を移動できます。
- キング:キングはクイーンと同じように動きますが、1動きにつき1マスしか動かないという制限があります(つまり、キングはカーディナルまたは斜めに隣接するマスにしか移動できません)。リマインダーとして、あなたは自分の王を制限する動きをすることはできません。したがって、あなたも王をチェックすることはできません。
チェスのルールには、「キャスティング」と「エンパッサン」と呼ばれる特別な動きも含まれています。ただし、これらの動きの合法性は、現在の位置だけでなくゲームの履歴にも依存するため(また、キャストには2つのピースを同時に移動する必要があり、入力形式に適合しません)、これらの動きのどちらも考慮する必要はありません存在する(つまり、キャスティングまたは入場者になる動きは違法と見なされるべきです)。
移動の有効性を示すために、任意の2つの異なる結果を出力できます。また、希望する方法で入力を取得できます。必要に応じて、ポジションに1インデックスではなく0インデックスを選択することもできます。これはコードゴルフなので、最短のコードが勝ちです!
テストケース
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)
この課題はサンドボックス化されました。説明なくダウン票を受け取ったので、とにかく投稿することにしました