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

Pythonで次のセルマトリックス状態の次の状態を見つけるプログラム?


1が生細胞を意味し、0が死細胞を意味する2Dバイナリ行列があるとします。セルの隣接セルは、そのすぐ近くの水平、垂直、および対角線のセルです。これらのルールを使用して、マトリックスの次の状態を見つける必要があります

  • 2つまたは3つの生きている隣人がいる生きている細胞は生きています。

  • 隣接する細胞が3つある死んだ細胞は、生きた細胞になります。

  • 他のすべての細胞は死にます。

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

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

その場合、出力は次のようになります

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

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

  • n:=行列の行サイズ、m:=行列の列サイズ

  • res:=サイズn x mの行列、0で埋める

  • 0からnの範囲のiの場合、実行

    • 0からmの範囲のjについては、次のようにします

      • s:=0

      • matrix [i、j]が0と同じ場合、

        • i-1からi+1の範囲のkの場合、実行

          • またはj-1からj+1の範囲のh、do

            • 0 <=k

              • s:=s + matrix [k、h]

        • res [i、j]:=[0、1、sが3と同じ場合はtrue]

      • それ以外の場合

        • i-1からi+1の範囲のkの場合、実行

          • j-1からj+1の範囲のhの場合、実行

            • 0 <=k

              • s:=s + matrix [k、h]

        • sが3または4の場合、

          • res [i、j]:=1

  • 解像度を返す

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

class Solution:
   def solve(self, matrix):
      n, m = len(matrix), len(matrix[0])
      res = [[0 for j in range(m)] for i in range(n)]
      for i in range(n):
         for j in range(m):
            s = 0
            if matrix[i][j] == 0:
               for k in range(i - 1, i + 2):
                  for h in range(j - 1, j + 2):
                     if 0 <= k < n and 0 <= h < m:
                        s += matrix[k][h]
               res[i][j] = [0, 1][s == 3]
            else:
               for k in range(i - 1, i + 2):
                  for h in range(j - 1, j + 2):
                     if 0 <= k < n and 0 <= h < m:
                        s += matrix[k][h]
               if s in [3, 4]:
                  res[i][j] = 1
      return res

ob = Solution()
matrix = [
   [1, 1, 0, 0],
   [0, 1, 0, 0],
   [0, 1, 0, 1],
   [1, 1, 0, 1]
]

print(ob.solve(matrix))

入力

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

出力

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

  1. Pythonでポリゴンの周囲を見つけるプログラム

    順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの周囲を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は16になります。 2つの辺の長さは3で、2つの辺の長さは5なので、2 * 5 + 2 * 3=16です。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です ユークリッド距離である((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))の平方根を返します (x1、y1)

  2. 行列の転置を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A):    for i in range(N):       for j in range(i+1, N):     &nbs