ধরুন আমাদের একটি 2D বাইনারি ম্যাট্রিক্স আছে যেখানে একটি 1 মানে একটি লাইভ সেল এবং 0 মানে একটি মৃত কোষ। একটি কোষের প্রতিবেশী হল এর অবিলম্বে অনুভূমিক, উল্লম্ব এবং তির্যক কোষ। আমাদের এই নিয়মগুলি ব্যবহার করে ম্যাট্রিক্সের পরবর্তী অবস্থা খুঁজে বের করতে হবে
-
দুই বা তিনজন জীবিত প্রতিবেশীর সাথে যেকোন জীবন্ত কোষ থাকে।
-
তিনটি জীবিত প্রতিবেশীর সাথে যে কোনও মৃত কোষ একটি জীবন্ত কোষে পরিণত হয়৷
-
অন্য সব কোষ মারা যায়।
সুতরাং, যদি ইনপুট মত হয়
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 রেঞ্জের জন্য, করুন
-
0 থেকে m রেঞ্জে j এর জন্য, করুন
-
s :=0
-
যদি ম্যাট্রিক্স[i, j] 0 এর মত হয়, তাহলে
-
k এর জন্য i - 1 থেকে i + 1 রেঞ্জে, করুন
-
অথবা h রেঞ্জ j - 1 থেকে j + 1, করুন
-
যদি 0 <=k
-
s :=s + ম্যাট্রিক্স[k, h]
-
-
-
-
res[i, j] :=[0, 1, সত্য যখন s 3 এর মত হয়]
-
-
অন্যথায়,
-
k এর জন্য i - 1 থেকে i + 1 রেঞ্জে, করুন
-
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]]