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

পাইথনে দুটি ম্যাট্রিক্স শর্তসাপেক্ষ কর্সপন্ডিং সোয়্যাপ দিয়ে স্ট্রিক্টলি ইনক্রিজিং করা সম্ভব কিনা তা যাচাই করা

মান লিজিয়ে আমাদের দুটি ম্যাট্রিক্স আছে যাদের সাইজ n x m এবং নাম mat1 এবং mat2। আমাদের যাচাই করতে হবে এই দুটি ম্যাট্রিক্স কি স্ট্রিক্টলি ইনক্রিজিং (strictly increasing) করা সম্ভব কেবল Corresponding পজিশনের (i, j) এলিমেন্টগুলো সোয়্যাপ করে।

যেমন, ইনপুট যদি:

715
1610


149
817

তবে আউটপুট হবে True কারণ আমরা (7, 14) এবং (10, 17) জোড়াগুলো সোয়্যাপ করে সেগুলো স্ট্রিক্টলি ইনক্রিজিং করতে পারি।

1415
1617


79
810

সমাধানের ধাপসমূহ

  • row := mat1-এর রো কাউন্ট
  • col := mat1-এর কলাম কাউন্ট
  • i ০ থেকে row - 1 পর্যন্ত, করুন:
    • j ০ থেকে col - 1 পর্যন্ত, করুন:
      • যদি mat1[i,j] > mat2[i,j] হয়, তবে:
        • mat1[i, j] এবং mat2[i, j] সোয়্যাপ করুন
  • i ০ থেকে row - 1 পর্যন্ত, করুন:
    • j ০ থেকে col-2 পর্যন্ত, করুন:
      • যদি mat1[i, j] >= mat1[i, j + 1] অথবা mat2[i, j] >= mat2[i, j + 1] হয়, তবে:
        • False রিটার্ন করুন
  • i ০ থেকে row-2 পর্যন্ত, করুন:
    • j ০ থেকে col - 1 পর্যন্ত, করুন:
      • যদি mat1[i, j] >= mat1[i + 1, j] অথবা mat2[i, j] >= mat2[i + 1, j] হয়, তবে:
        • False রিটার্ন করুন
  • True রিটার্ন করুন

উদাহরণ

বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:

def solve(mat1, mat2):
    row = len(mat1)
    col = len(mat1[0])
    for i in range(row):
        for j in range(col):
            if mat1[i][j] > mat2[i][j]:
                mat1[i][j], mat2[i][j] = mat2[i][j], mat1[i][j]
    for i in range(row):
        for j in range(col-1):
            if mat1[i][j] >= mat1[i][j + 1] or mat2[i][j] >= mat2[i][j + 1]:
                return False
    for i in range(row-1):
        for j in range(col):
            if mat1[i][j] >= mat1[i + 1][j] или mat2[i][j] >= mat2[i + 1][j]:
                return False
    return True

mat1 = [[7, 15],
        [16, 10]]
mat2 = [[14, 9],
        [8, 17]]
print(solve(mat1, mat2))

ইনপুট

[[7, 15], [16, 10]], [[14, 9], [8, 17]]

আউটপুট

True
  1. পাইথনে দুটি ট্রি নোড স왪 করায় সমান হয় কিনা যাচাই করা (Flip Equivalent Trees)

  2. পাইথনে অ্যারেয়ের সব ডিজিট ব্যবহার করে ৩ দিয়ে বিভাজ্য সংখ্যা বানানো সম্ভব কিনা চেক করা

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

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