সমস্যা বিবরণ
মান लीজিয়ে, আমাদের একটি n×n আকারের ম্যাট্রিক্স দেওয়া আছে যাতে পূর্ণসংখ্যা রয়েছে। আমাদের জানতে হবে সেই ম্যাট্রিক্সের সকল সারি তার আগের সারির পরিপার্শ্বিক রোটেশন (circular rotation) কিনা। প্রথম সারির ক্ষেত্রে, সেটি n-তম সারির পরিপার্শ্বিক রোটেশন হওয়া উচিত।
উদাহরণ
ইনপুট ম্যাট্রিক্স:
| B | A | D | C |
| C | B | A | D |
| D | C | B | A |
| A | D | C | B |
আউটপুট: True
সমাধানের পদ্ধতি
- প্রথম সারির সব এলিমেন্টকে একটি স্ট্রিং-এ जोড়া দিয়ে 'concat' তৈরি করুন (এলিমেন্টগুলোর মাঝপথে '-' ব্যবহার করুন)।
- এই 'concat' স্ট্রিংকে নিজের সাথে দুগুণ করুন (concat = concat + concat)। এটি সমস্ত সম্ভাব্য রোটেশন ধারণ করবে।
- দ্বিতীয় সারি থেকে শেষ সারি পর্যন্ত প্রতিটি সারির জন্য:
- সারিটি একইভাবে স্ট্রিং-এ রূপান্তর করুন ('curr_row')।
- যাচাই করুন 'curr_row' কি 'concat'-এর মধ্যে উপস্থিত।
- যদি কোনো সারি মেলে না,
Falseরিটার্ন করুন।
- সব সারি মেললে
Trueরিটার্ন করুন।
পাইথন বাস্তবায়ন
def solve(matrix):
concat = ""
# প্রথম সারি থেকে concat তৈরি
for i in range(len(matrix)):
concat = concat + "-" + str(matrix[0][i])
# concat কে দ্বিগুণ করুন - সব সম্ভাব্য রোটেশন কভার করতে
concat = concat + concat
# বাকি সারিগুলো যাচাই
for i in range(1, len(matrix)):
curr_row = ""
for j in range(len(matrix[0])):
curr_row = curr_row + "-" + str(matrix[i][j])
if curr_row not in concat:
return False
return True
# টেস্ট কেস
matrix = [['B', 'A', 'D', 'C'],
['C', 'B', 'A', 'D'],
['D', 'C', 'B', 'A'],
['A', 'D', 'C', 'B']]
print(solve(matrix)) # আউটপুট: True
ইনপুট
[['B', 'A', 'D', 'C'], ['C', 'B', 'A', 'D'], ['D', 'C', 'B', 'A'], ['A', 'D', 'C', 'B']]
আউটপুট
True
কোড ব্যাখ্যা
- প্রথম সারির এলিমেন্টগুলো '-' দিয়ে जोড়া দিয়ে একটি স্ট্রিং তৈরি করা হয়েছে।
- স্ট্রিংটি নিজের সাথে দুগুণ করা হয়েছে যাতে সব সম্ভাব্য পরিপার্শ্বিক রোটেশন ধারণ করে।
- প্রতিটি পরবর্তী সারিকে একই ফরম্যাটে স্ট্রিং-এ রূপান্তর করে 'concat'-এ খোঁজা হয়েছে।
- যদি কোনো সারি না মিলে, ফাংশন
Falseরিটার্ন করে। - সব সারি মিললে
Trueরিটার্ন করে।