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

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

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

इसलिए, यदि इनपुट बहुभुज ="111010" जैसा है, तो आउटपुट 2 होगा क्योंकि

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

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

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

  • एक फ़ंक्शन को परिभाषित करें all() । इसमें n
  • . लगेगा
  • यदि n mod 2 1 के समान है, तो नहीं :=n*(n-1) /2
  • अन्यथा, नहीं:=n*(n/2-1)
  • यदि n mod 3 0 के समान है, तो नहीं:=नहीं - n/3*2
  • वापसी संख्या
  • एक फ़ंक्शन को परिभाषित करें non() । इसमें एक,n
  • . लगेगा
  • यदि n mod 2 1 के समान है, तो
    • s0 :=0, s1 :=0
    • मैं :=0
    • जबकि मैं
    • यदि 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
    • मैं :=0
    • जबकि मैं
    • यदि 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
    • मैं :=0
    • जबकि मैं
    • यदि a[i] '0' के समान है, तो, s00:=s00 + 1
    • अन्यथा s01:=s01 + 1
    • i :=i + 2
  • मैं :=1
  • जबकि मैं
  • यदि 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
  • मैं :=0
  • जबकि मैं
  • यदि a[i] a[(i + n1)mod n] के समान नहीं है, तो
    • s :=s - 2
  • i :=i + 1
  • यदि n mod 3 0 के समान है, तो
    • n1 :=n/3
    • n2 :=n1*2
    • मैं :=0
    • जबकि मैं
    • यदि 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 :=बहुभुज का आकार
  • नहीं:=सभी(n) - गैर(बहुभुज, n) /2
  • वापसी संख्या
  • उदाहरण

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

    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))

    इनपुट

    1, 1000

    आउटपुट

    2

    1. पायथन में एस में अलग-अलग सबस्ट्रिंग की संख्या गिनने का कार्यक्रम

      मान लीजिए कि हमारे पास एक स्ट्रिंग s है, हमें s के अलग-अलग गैर-रिक्त सबस्ट्रिंग की संख्या ज्ञात करनी है। इसलिए, यदि इनपुट s =abaa जैसा है, तो आउटपुट 8 होगा, क्योंकि सबस्ट्रिंग [a, b, ab, ba, aa, aba, बा, आबा]। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - कोशिश करें:=एक नया नक्शा n :=आकार का

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

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

    1. पायथन में n नोड्स के साथ BST की संख्या गिनने का कार्यक्रम

      मान लीजिए कि हमारे पास अलग-अलग नोड हैं। सभी अलग हैं। हमें यह पता लगाना है कि हम उन्हें कितने तरीकों से व्यवस्थित कर सकते हैं ताकि हम बाइनरी सर्च ट्री बना सकें। जैसा कि हम बाइनरी सर्च ट्री के बारे में जानते हैं, लेफ्ट सबट्री में हमेशा छोटे मान होते हैं और राइट सबट्री में बड़े मान होते हैं। इसे हल कर