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

पायथन में रंगीन शीर्षों वाले नियमित बहुभुज से समद्विबाहु त्रिभुजों की संख्या गिनने का प्रोग्राम


मान लीजिए हमारे पास n भुजाओं वाला एक नियमित बहुभुज है जिसे आकार n के बाइनरी स्ट्रिंग द्वारा दर्शाया गया है। शीर्ष या तो नीले (0) या लाल (1) रंग के हो सकते हैं। उन्हें घड़ी की दिशा में रंगा गया है। हमें उन समद्विबाहु त्रिभुजों की संख्या गिननी है जिनके शीर्ष नियमित बहुभुज के शीर्ष हैं, और उनके रंग समान हैं।

उदाहरण के लिए, यदि इनपुट polygon = "111010" है, तो आउटपुट 2 होगा क्योंकि

पायथन में रंगीन शीर्षों वाले नियमित बहुभुज से समद्विबाहु त्रिभुजों की संख्या गिनने का प्रोग्राम

दो त्रिभुज ACE और AFE हैं।

समाधान दृष्टिकोण

इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:

  • all() नामक एक फंक्शन परिभाषित करें। यह n लेगा
    • यदि n mod 2, 1 के समान है, तो no := n*(n-1) /2
    • अन्यथा, no := n*(n/2-1)
    • यदि n mod 3, 0 के समान है, तो no := no - n/3*2
    • no लौटाएं
  • non() नामक एक फंक्शन परिभाषित करें। यह a, n लेगा
    • यदि n mod 2, 1 के समान है, तो
      • s0 := 0, s1 := 0
      • i := 0
      • जब तक i < n, करें
        • यदि a[i], '0' के समान है, तो s0 := s0 + 1
        • अन्यथा s1 := s1 + 1
        • i := i + 1
      • s := s0*s1*6
      • यदि n mod 3, 0 के समान है, तो
        • n1 := n/3
        • n2 := n1*2
        • i := 0
        • जब तक i < n, करें
          • यदि a[i], a[(i+n1)mod n] के समान नहीं है, तो
            • s := s - 2
          • यदि a[i], a[(i+n2)mod n] के समान नहीं है, तो
            • s := s - 2
          • i := i + 1
    • अन्यथा,
      • s00 := 0, s01 := 0, s10 := 0, s11 := 0, s := 0
      • i := 0
      • जब तक i < n, करें
        • यदि a[i], '0' के समान है, तो s00 := s00 + 1
        • अन्यथा s01 := s01 + 1
        • i := i + 2
      • i := 1
      • जब तक i < n, करें
        • यदि a[i], '0' के समान है, तो s10 := s10 + 1
        • अन्यथा s11 := s11 + 1
        • i := i + 2
      • s := s + s00 * s01 * 8
      • s := s + s10 * s11 * 8
      • s := s + s00 * s11 * 4
      • s := s + s10 * s01 * 4
      • n1 := n/2
      • i := 0
      • जब तक i < n, करें
        • यदि a[i], a[(i + n1)mod n] के समान नहीं है, तो
          • s := s - 2
        • i := i + 1
      • यदि n mod 3, 0 के समान है, तो
        • n1 := n/3
        • n2 := n1*2
        • i := 0
        • जब तक i < n, करें
          • यदि a[i], a[(i+n1)mod n] के समान नहीं है, तो
            • s := s - 2
          • यदि a[i], a[(i+n2)mod n] के समान नहीं है, तो
            • s := s - 2
          • i := i + 1
      • s/2 लौटाएं
    • मुख्य विधि से, निम्न करें:
      • n := polygon का आकार
      • no := all(n) - non(polygon, n) /2
      • no लौटाएं

    उदाहरण

    बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

    def all(n):
        if n % 2 == 1:
            no = n*(n-1)/2
        else:
            no = n*(n/2-1)
        if n % 3 == 0:
            no -= n/3*2
        return no
    
    def non(a,n):
        if n % 2 == 1:
            s0 = s1 = 0
            i = 0
            while i < n:
                if a[i] == '0':
                    s0 += 1
                else:
                    s1 += 1
                i += 1
            s = s0*s1*6
            if n % 3 == 0:
                n1 = n/3
                n2 = n1*2
                i = 0
                while i < n:
                    if a[i] != a[int((i+n1)%n)]:
                        s -= 2
                    if a[i] != a[int((i+n2)%n)]:
                        s -= 2
                    i += 1
        else:
            s00 = s01 = s10 = s11 = s = 0
            i = 0
            while i < n:
                if a[i] == '0':
                    s00 += 1
                else:
                    s01 += 1
                i += 2
            i = 1
            while i < n:
                if a[i] == '0':
                    s10 += 1
                else:
                    s11 += 1
                i += 2
            s += s00 * s01 * 8
            s += s10 * s11 * 8
            s += s00 * s11 * 4
            s += s10 * s01 * 4
            n1 = n/2
            i = 0
            while i < n:
                if a[i] != a[int((i + n1)%n)]:
                    s -= 2
                i += 1
            if n % 3 == 0:
                n1 = n/3
                n2 = n1*2
                i = 0
                while i < n:
                    if a[i] != a[int((i+n1)%n)]:
                        s -= 2
                    if a[i] != a[int((i+n2)%n)]:
                        s -= 2
                    i += 1
        return s/2
    
    def solve(polygon):
        n = len(polygon)
        no = all(n) - non(polygon,n)/2
        return int(no)
    
    polygon = "111010"
    print(solve(polygon))

    इनपुट

    "111010"

    आउटपुट

    2
  1. - Python प्रोग्राम - स्ट्रिंग में विशिष्ट सबस्ट्रिंग की संख्या गिनें

    एक स्ट्रिंग s दी गई है, हमें s के विशिष्ट गैर-खाली सबस्ट्रिंग की संख्या खोजनी है। उदाहरण इनपुट: s = abaa आउटपुट: 8 व्याख्या: सबस्ट्रिंग हैं [a, b, ab, ba, aa, aba, baa, abaa]। एल्गोरिदम (ट्राई/प्रीफिक्स ट्री) trie := {} (खाली डिक्शनरी) n := len(s) i 0 से n-1 तक: curr := trie j i से n-1

  1. पायथन में प्रत्येक ब्रैकेट गहराई में वर्णों की संख्या गिनने का प्रोग्राम पायथन में प्रत्येक ब्रैकेट गहराई में वर्णों की संख्या गिनने का प्रोग्राम

    मान लीजिए हमारे पास एक स्ट्रिंग s है जिसमें केवल तीन वर्ण X, ( , और ) हैं। स्ट्रिंग में संतुलित ब्रैकेट हैं और बीच में कुछ X हैं साथ ही संभवतः नेस्टेड ब्रैकेट भी पुनरावर्ती रूप से हो सकते हैं। हमें s में ब्रैकेट की प्रत्येक गहराई पर X की संख्या ढूंढनी है, सबसे उथली गहराई से सबसे गहरी गहराई तक शुरू क

  1. पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की सूची है। हमारे पास x नामक एक और संख्या भी है। हमें nums से उन सभी नंबरों को फ़िल्टर करके ढूंढना है जो x से कम हैं। पायथन में filter() मेथड होता है जो फंक्शन को आर्गुमेंट के रूप में लेता है और इस फंक्शन का उपयोग करके फ़िल्टर करता है। तो, यदि इनपुट nums = [1,5