কম্পিউটার টিউটোরিয়াল

পাইথনে ম্যাট্রিক্সের সকল সারি পরিপার্শ্বিক রোটেশন কিনা যাচাই


সমস্যা বিবরণ

মান लीজিয়ে, আমাদের একটি n×n আকারের ম্যাট্রিক্স দেওয়া আছে যাতে পূর্ণসংখ্যা রয়েছে। আমাদের জানতে হবে সেই ম্যাট্রিক্সের সকল সারি তার আগের সারির পরিপার্শ্বিক রোটেশন (circular rotation) কিনা। প্রথম সারির ক্ষেত্রে, সেটি n-তম সারির পরিপার্শ্বিক রোটেশন হওয়া উচিত।

উদাহরণ

ইনপুট ম্যাট্রিক্স:

BADC
CBAD
DCBA
ADCB

আউটপুট: True

সমাধানের পদ্ধতি

  1. প্রথম সারির সব এলিমেন্টকে একটি স্ট্রিং-এ जोড়া দিয়ে 'concat' তৈরি করুন (এলিমেন্টগুলোর মাঝপথে '-' ব্যবহার করুন)।
  2. এই 'concat' স্ট্রিংকে নিজের সাথে দুগুণ করুন (concat = concat + concat)। এটি সমস্ত সম্ভাব্য রোটেশন ধারণ করবে।
  3. দ্বিতীয় সারি থেকে শেষ সারি পর্যন্ত প্রতিটি সারির জন্য:
    • সারিটি একইভাবে স্ট্রিং-এ রূপান্তর করুন ('curr_row')।
    • যাচাই করুন 'curr_row' কি 'concat'-এর মধ্যে উপস্থিত।
    • যদি কোনো সারি মেলে না, False রিটার্ন করুন।
  4. সব সারি মেললে 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 রিটার্ন করে।
  1. পাইথনে দুটি বাইনারি ট্রির সকল লেভেল যুগ्मানুকরণ (anagram) কিনা যাচাই

  2. পাইথন - স্ট্রিংয়ের সব ক্যারেক্টারের ফ্রিকোয়েন্সি আলাদা কিনা যাচাই করা

  3. পাইথনে চেক করা সব লিস্ট এলিমেন্ট একই কিনা

  4. পাইথন প্রোগ্রাম: দুটি ম্যাট্রিক্স ইডেন্টিক্যাল কিনা চেক করা