কম্পিউটার

পাইথনে 0 দিয়ে ভরা সমস্ত আয়তক্ষেত্র খুঁজুন


ধরুন আমাদের একটি বাইনারি 2D ম্যাট্রিক্স আছে, এখন আমাদের 0s দিয়ে ভরা সমস্ত আয়তক্ষেত্রের শুরু বিন্দু এবং সমাপ্তি বিন্দু খুঁজে বের করতে হবে। আমাদের মনে রাখতে হবে যে আয়তক্ষেত্রগুলি আলাদা এবং একে অপরকে স্পর্শ করে না তবে তারা অ্যারের সীমানা স্পর্শ করতে পারে। শুধুমাত্র একক উপাদান সহ একটি আয়তক্ষেত্রও সম্ভব।

সুতরাং, যদি ইনপুট −

এর মত হয়
1 0 1 1 1 0 1
1 1 0 1 1 1 1
1 0 1 1 0 0 1
1 0 1 1 0 0 1
1 0 1 1 0 1 1
1 0 1 0 0 0 0
1 1 1 0 0 0 1
1 0 1 1 1 0 1

তাহলে আউটপুট হবে [[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1] , 5, 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন সংজ্ঞায়িত করুন find_rect()। এটি i,j,a,output,index
  • নেবে
  • x :=সারি গণনা
  • y :=কল গণনা
  • পতাকা_কল :=0
  • পতাকা_সারি :=0
  • m-এর জন্য i থেকে x, do
    • যদি a[m, j] 1 এর মত হয়, তাহলে
      • পতাকা_সারি :=1
      • বিরতি
    • যদি a[m, j] 5 এর সমান হয়, তাহলে
      • কিছুই করবেন না
    • j থেকে y রেঞ্জের মধ্যে n এর জন্য
    • করুন
      • যদি a[m, n] 1 এর মত হয়, তাহলে
        • পতাকা_কল :=1
        • ব্রেক
      • a[m, n] :=5
    • যদি ফ্ল্যাগ_রো 1 এর মত হয়, তাহলে
      • আউটপুট[সূচী] শেষে m-1 ঢোকান
    • অন্যথায়,
      • আউটপুট[সূচী] শেষে m ঢোকান
    • যদি flag_col 1 এর মত হয়, তাহলে
      • আউটপুট[সূচী] শেষে n-1 ঢোকান
    • অন্যথায়,
      • আউটপুট[সূচী] শেষে n প্রবেশ করান
  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
  • n :=a এর আকার
  • op :=একটি নতুন তালিকা
  • idx :=-1
  • আমি 0 থেকে n রেঞ্জের জন্য, কর
      j-এর জন্য 0 থেকে a[0] এর আকারের মধ্যে,
        করুন
      • যদি a[i, j] 0 এর মত হয়, তাহলে
        • অপ-এ [i,j] ঢোকান
        • idx :=idx + 1
        • find_rect(i, j, a, op, idx)
  • ডিসপ্লে অপ

উদাহরণ কোড

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

def find_rect(i,j,a,output,index):x =len(a) y =len(a[0]) flag_col =0 flag_row =0 m range (i,x):যদি a [m][j] ==1:flag_row =1 বিরতি যদি a[m][j] ==5:n রেঞ্জে (j, y):যদি a[m][n] ==1:flag_col =1 break a[m][n] =5 if flag_row ==1:output[index].append(m-1) else:output[index].append(m) if flag_col ==1:output[index] .append(n-1) else:output[index].append(n)def get_coord(a):n =len(a) op =[] idx =-1 in range(0,n):j এর জন্য পরিসরে(0, len(a[0])):যদি a[i][j] ==0:op.append([i, j]) idx =idx + 1 find_rect(i, j, a, op , idx) প্রিন্ট (অপ) পরীক্ষা =[[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0 , 0, 1, 1], [1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0 , 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]]get_coord(পরীক্ষা) 

ইনপুট

<প্রে>[[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1, 1] ],[1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]]

আউটপুট

<প্রে>[[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1, 5 , 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]
  1. পাইথনে n নোড সহ সমস্ত সরল অনির্দেশিত গ্রাফের খরচের যোগফল খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে দুটি আয়তক্ষেত্র দ্বারা আচ্ছাদিত মোট এলাকা খুঁজে বের করার প্রোগ্রাম

  3. পাইথনের সাথে একটি ডিরেক্টরির সমস্ত ফাইল কীভাবে মুছবেন?

  4. পাইথনে .txt এক্সটেনশন সহ ডিরেক্টরির সমস্ত ফাইল কীভাবে খুঁজে পাবেন?