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

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

मान लीजिए हमारे पास एक बाइनरी 2D मैट्रिक्स है। अब हमें 0 से भरे सभी आयतों के प्रारंभिक बिंदु और अंतिम बिंदु ढूंढने हैं। ध्यान रखें कि आयत अलग-अलग हैं और एक-दूसरे को स्पर्श नहीं करते, हालांकि वे सरणी की सीमा को स्पर्श कर सकते हैं। एकल तत्व वाला आयत भी संभव है।

यदि इनपुट निम्नलिखित जैसा है:

1011101
1101111
1110011
1011001
1011011
1010000
1110001
1011101

तो आउटपुट होगा [[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 := कॉलम की संख्या
  • flag_col := 0, flag_row := 0
  • m के लिए i से x तक की रेंज में:
    • यदि a[m, j] 1 के समान है, तो flag_row := 1, ब्रेक
    • यदि a[m, j] 5 के समान है, तो कुछ न करें
    • n के लिए j से y तक की रेंज में:
      • यदि a[m, n] 1 के समान है, तो flag_col := 1, ब्रेक
      • a[m, n] := 5
    • यदि flag_row 1 है, तो output[index] के अंत में m-1 डालें
    • अन्यथा, output[index] के अंत में m डालें
    • यदि flag_col 1 है, तो output[index] के अंत में n-1 डालें
    • अन्यथा, output[index] के अंत में n डालें
  • मुख्य मेथड से:
    • n := a का आकार
    • op := एक नई सूची, idx := -1
    • i के लिए 0 से n तक की रेंज में:
      • j के लिए 0 से a[0] के आकार तक की रेंज में:
        • यदि a[i, j] 0 के समान है, तो [i,j] को op में डालें, idx बढ़ाएं, find_rect() कॉल करें
    • op प्रदर्शित करें

उदाहरण कोड

def find_rect(i,j,a,output,index):
    x = len(a)
    y = len(a[0])
    flag_col = 0
    flag_row = 0
    for m in range(i,x):
        if a[m][j] == 1:
            flag_row = 1
            break
        if a[m][j] == 5:
            pass
        for n in range(j, y):
            if 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
    for i in range(0,n):
        for j in range(0, len(a[0])):
            if a[i][j] == 0:
                op.append([i, j])
                idx = idx + 1
                find_rect(i, j, a, op, idx)
    print(op)

tests = [[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(tests)

इनपुट

[[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. Python-এ n নোড বিশিষ্ট সিম্পল অ dirigido গ্রাফের সব কস্টের যোগফল বের করার প্রোগ্রাম

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

  3. পাইথনে ডিরেক্টরির সকল ফাইল মুছার পদ্ধতি

  4. পাইথনে .txt এক্সটেনশন वाले সকল ফাইল খুঁজে বের করার পদ্ধতি