Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python - 0 से भरे सभी रेक्टेंगल ढूंढना

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

तो, यदि इनपुट इस तरह है:

1011101
1101111
1011001
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 := idx + 1
          • find_rect(i, j, a, op, idx)
    • 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(n):
            for j in range(len(a[0])):
                if a[i][j] == 0:
                    op.append([i, j])
                    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 नोड्स वाले सभी सिंपल अनडायरेक्टेड ग्राफ की लागत का योग खोजने का प्रोग्राम

    मान लीजिए हमारे पास n नोड्स वाला एक अनडायरेक्टेड ग्राफ G है। अब एक सिंपल अनडायरेक्टेड ग्राफ की लागत उसके नोड्स की लागत का योग है। और एक नोड की लागत D^k है, जहां D उसकी डिग्री है। अब हमारे पास n और k मान हैं। हमें n नोड्स वाले सभी संभावित सिंपल अनडायरेक्टेड ग्राफ की लागत का योग ढूंढना है। परिणाम बहुत

  1. पायथन में दो आयतों द्वारा कवर किए गए कुल क्षेत्रफल को खोजने का प्रोग्राम पायथन में दो आयतों द्वारा कवर किए गए कुल क्षेत्रफल को खोजने का प्रोग्राम

    मान लीजिए हम 2D तल में दो रेक्टिलिनियर आयतों द्वारा कवर किए गए कुल क्षेत्रफल को खोजना चाहते हैं। यहां प्रत्येक आयत को उसके निचले बाएं कोने और ऊपरी दाएं कोने द्वारा परिभाषित किया गया है जैसा कि चित्र में दिखाया गया है।इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:width_1 := |C-A|, height_1 := |D-

  1. - पायथन में .txt एक्सटेंशन वाली डायरेक्टरी की सभी फ़ाइलें कैसे खोजें?

    आप डायरेक्टरी में सभी डायरेक्टरी और फ़ाइलें प्राप्त करने के लिए os.listdir मेथड का उपयोग कर सकते हैं। फिर केवल फ़ाइलें प्राप्त करने के लिए सूची को फ़िल्टर करें और उनके एक्सटेंशन भी जांचें। उदाहरण >>> import os >>> file_list = [f for f in os.listdir(.) if os.path.isfile(os.path.joi