Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでの騎士の攻撃


長方形のチェス盤を表す2次元のバイナリ行列があるとします。ここで、0は空のセルを表し、1は騎士を表します。騎士は、水平方向に2マス、垂直方向に1マス、または縦に2マス、横に1マス移動することができます(チェス盤の騎士のように)。 2人の騎士がお互いを攻撃しているかどうかを確認する必要があります。

したがって、入力が次のような場合

0 0 0 0 0
0 1 0 0 0
0 0 0 1 0

その後、出力はTrueになります

これを解決するには、次の手順に従います-

  • row、col:=行列の行数、行列の列数
  • 0から行1の範囲のrの場合、実行
    • 0からcol-1の範囲のcの場合、do
      • A [r] [c]がゼロ以外の場合、
        • 各nr、nc in [(r + 1、c-2)、(r + 1、c + 2)、(r + 2、c-1)、(r + 2、c + 1)] 、do
          • nrが行の範囲内にあり、ncがcolの範囲内にあり、A [nr、nc]がゼロ以外の場合、
            • Trueを返す
  • Falseを返す

理解を深めるために、次の実装を見てみましょう-

class Solution:
   def solve(self, A):
      row, col = len(A), len(A[0])
      for r in range(row):
         for c in range(col):
            if A[r][c]:
               for nr, nc in ((r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)):
                  if 0 <= nr < row and 0 <= nc <col and
                     A[nr][nc]:
                     return True
      return False
ob = Solution()
mat = [[0,0,0,0,0],
[0,1,0,0,0],
[0,0,0,1,0]]
print(ob.solve(mat))

入力

[[0,0,0,0,0],
[0,1,0,0,0],
[0,0,0,1,0]]

出力

True

  1. 女王が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を

  2. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',