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

      • 행렬[i, j]가 0과 같으면

        • 범위 i - 1 ~ i + 1의 k에 대해 수행

          • 또는 j - 1 ~ j + 1 범위의 h, 수행

            • 0 <=k

              • s :=s + 행렬[k, h]

        • res[i, j] :=[0, 1, s가 3과 같을 때 참]

      • 그렇지 않으면

        • 범위 i - 1 ~ i + 1의 k에 대해 수행

          • j - 1 ~ j + 1 범위의 h에 대해 수행

            • 0 <=k

              • s :=s + 행렬[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]]