Pythonで変更されたチェス盤にN泊しているときに、王が有効な動きを移動できるかどうかを確認します
チェスと同じルールの無限チェス盤が1つあり、無限チェス盤にN騎士の座標と王の座標がある場合、王がチェックメイトであるかどうかを確認する必要があります。無限ボードの座標は、(-10 ^ 9 <=x、y <=10 ^ 9)のような大きな値で囲まれています。
したがって、入力が騎士の位置=[[2,1]、[1,3]、[3,6]、[5,5]、[6,1]、[7,3]]および王の位置のような場合:[4,3]、
キングには動きがないため、出力はTrueになり、チェックメイトになります。
これを解決するには、次の手順に従います-
- my_dict:=新しい地図
- 0からnの範囲のiについては、
- x:=a [i、0]
- y:=a [i、1]
- my_dict [x、y]:=1
- my_dict [x-2、y + 1]:=1
- my_dict [x-2、y-1]:=1
- my_dict [x + 1、y + 2]:=1
- my_dict [x + 1、y-2]:=1
- my_dict [x-1、y + 2]:=1
- my_dict [x + 2、y + 1]:=1
- my_dict [x + 2、y --1]:=1
- my_dict [x-1、y-2]:=1
- -1から1の範囲のiについては、
- -1から1の範囲のjについては、
- nx:=king_pos [0] + i
- ny:=king_pos [1] + j
- iが0と同じでなく、jが0と同じでない場合、
- my_dict [(nx、ny)]がゼロの場合、
- Falseを返す
- my_dict [(nx、ny)]がゼロの場合、
- -1から1の範囲のjについては、
- Trueを返す
例
理解を深めるために、次の実装を見てみましょう-
def is_checkmate(a, n, king_pos): my_dict = {} for i in range(0, n): x = a[i][0] y = a[i][1] my_dict[(x, y)] = 1 my_dict[(x - 2, y + 1)] = 1 my_dict[(x - 2, y - 1)] = 1 my_dict[(x + 1, y + 2)] = 1 my_dict[(x + 1, y - 2)] = 1 my_dict[(x - 1, y + 2)] = 1 my_dict[(x + 2, y + 1)] = 1 my_dict[(x + 2, y - 1)] = 1 my_dict[(x - 1, y - 2)] = 1 for i in range(-1, 2): for j in range(-1, 2): nx = king_pos[0] + i ny = king_pos[1] + j if i != 0 and j != 0: if not my_dict[(nx, ny)]: return False return True a = [[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]] n = len(a) pos = [4, 3] print (is_checkmate(a, n, pos))
入力
[[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]], 6, [4, 3]
出力
True
-
女王がPythonでチェス盤の特定のセルを攻撃できるかどうかを確認します
チェス盤に女王と対戦相手の2つの座標があるとします。これらのポイントはそれぞれQとOです。女王が相手を攻撃できるかどうかを確認する必要があります。女王は同じ行、同じ列、斜めに攻撃できることがわかっています。 したがって、入力がQ =(1、1)O =(4、4)のようである場合、Qは対角線上(4、4)になる可能性があるため、出力はTrueになります。 これを解決するには、次の手順に従います- QのxがOのxと同じである場合、 Trueを返す QのyがOのyと同じである場合、 Trueを返す if | x of Q-x of O | Qの|y-O|のyと同じで、 Trueを
-
Pythonでロボットが目標位置に到達できるかどうかをチェックするプログラム
現在、位置(0、0)(デカルト平面)に座っているロボットがあるとします。 N(北)、S(南)、W(西)、およびE(東)を含む、実行可能な移動のリストがある場合。宛先座標(x、y)に到達できるかどうかを確認する必要があります。 したがって、入力がmoves =[N、N、E、E、S]、(x、y)=(2,1)のような場合、出力はTrueになります。 これを解決するには、次の手順に従います- temp_coord:=[0,0] 移動の移動ごとに、 移動が「N」と同じ場合、 temp_coord [1]:=temp_coord [1] + 1 それ以外の場合、移動が「S」と同じ