মান लीজiye, আমাদের কাছে শব্দের একটি গ্রিড বা ম্যাট্রিক্স আছে। আমাদের যাচাই করতে হবে যে প্রদত্ত শব্দটি গ্রিডে উপস্থিত কিনা। শব্দটি চারভাবে পাওয়া যেতে পারে: অনুভূমিকভাবে বাম ও ডান এবং লম্বভাবে উপর ও নিচে। যদি শব্দটি পাওয়া যায় তবে True রিটার্ন করবে, অন্যথায় False।
যেমন, ইনপুট হলে:
| p | g | h | s | f |
| y | k | d | g | h |
| t | k | g | h | i |
| h | n | s | j | s |
| o | j | f | g | h |
| n | r | t | y | u |
input_str = "python", তবে আউটপুট হবে True।
এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব:
- find_grid() ফাংশন সংজ্ঞায়িত করুন। এটি ম্যাট্রিক্স, input_str, row_pos, col_pos, row_count, col_count, degree নেবে।
- যদি degree input_str-এর সাইজের সমান হয়, তবে True রিটার্ন করুন।
- যদি row_pos < 0 বা col_pos < 0 বা row_pos >= row_count বা col_pos >= col_count হয়, তবে False রিটার্ন করুন।
- যদি matrix[row_pos, col_pos] input_str[degree]-এর সমান হয়, তবে:
- temp := matrix[row_pos, col_pos]
- matrix[row_pos, col_pos]-এর উপাদানগুলো '#' দিয়ে রিপ্লেস করুন।
- result := find_grid(matrix, input_str, row_pos - 1, col_pos, row_count, col_count, degree + 1) বিটওয়াইজ OR find_grid(matrix, input_str, row_pos + 1, col_pos, row_count, col_count, degree + 1) বিটওয়াইজ OR find_grid(matrix, input_str, row_pos, col_pos - 1, row_count, col_count, degree + 1) বিটওয়াইজ OR find_grid(matrix, input_str, row_pos, col_pos + 1, row_count, col_count, degree + 1)
- matrix[row_pos, col_pos]-এর উপাদানগুলো temp দিয়ে রিপ্লেস করুন।
- result রিটার্ন করুন।
- অন্যথায়, False রিটার্ন করুন।
- মূল ফাংশন/মেথড থেকে নিচের কাজগুলো করুন:
- যদি input_str-এর দৈর্ঘ্য > row_count * col_count হয়, তবে False রিটার্ন করুন।
- row কে 0 থেকে row_count পর্যন্ত রেঞ্জে নিয়ে, col কে 0 থেকে col_count পর্যন্ত রেঞ্জে নিয়ে লুপ চালান।
- যদি matrix[row, col] input_str[0]-এর সমান হয়, তবে:
- যদি find_grid(...) True রিটার্ন করে, তবে True রিটার্ন করুন।
- যদি matrix[row, col] input_str[0]-এর সমান হয়, তবে:
- False রিটার্ন করুন।
উদাহরণ
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:
def find_grid(matrix, input_str, row_pos, col_pos, row_count, col_count, degree):
if (degree == len(input_str)):
return True
if (row_pos < 0 or col_pos < 0 or row_pos >= row_count or col_pos >= col_count):
return False
if (matrix[row_pos][col_pos] == input_str[degree]):
temp = matrix[row_pos][col_pos]
matrix[row_pos] = matrix[row_pos][:col_pos] + "#" + matrix[row_pos][col_pos+1:]
result = (find_grid(matrix, input_str, row_pos - 1, col_pos, row_count, col_count, degree + 1) |
find_grid(matrix, input_str, row_pos + 1, col_pos, row_count, col_count, degree + 1) |
find_grid(matrix, input_str, row_pos, col_pos - 1, row_count, col_count, degree + 1) |
find_grid(matrix, input_str, row_pos, col_pos + 1, row_count, col_count, degree + 1))
matrix[row_pos] = matrix[row_pos][:col_pos] + temp + matrix[row_pos][col_pos+1:]
return result
else:
return False
def solve(matrix, input_str, row_count, col_count):
if (len(input_str) > row_count * col_count):
return False
for row in range(row_count):
for col in range(col_count):
if (matrix[row][col] == input_str[0]):
if (find_grid(matrix, input_str, row, col, row_count, col_count, 0)):
return True
return False
word_grid = ["pghsf", "ykdgh", "tkghi", "hnsjs", "ojfgh", "nrtyu"]
print(solve(word_grid, "python", 6, 5))
ইনপুট
["pghsf", "ykdgh", "tkghi", "hnsjs", "ojfgh", "nrtyu"], "python"
আউটপুট
True