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

पायथन में चलते हुए जानवरों की अंतिम स्थिति ज्ञात करने का प्रोग्राम जब वे रुकते हैं


मान लीजिए हमारे पास एक स्ट्रिंग s है जो कुछ जानवरों की प्रारंभिक स्थितियों को दर्शाती है। प्रत्येक जानवर तीन मानों में से एक ले सकता है: L (बाएं चलता है), R (दाएं चलता है), @ (स्थिर खड़ा है)। एक दिशा में चलने वाले जानवर अन्य जानवरों को उठा लेते हैं जब तक कि उन्हें विपरीत दिशा से बल न मिले। तब वे स्थिर खड़े हो जाते हैं। हमें प्रत्येक जानवर की अभिविन्यास ज्ञात करनी है जब वे चलना बंद कर देते हैं।

उदाहरण के लिए, s = "@@L@R@@@@L" के लिए आउटपुट "LLL@RRRLLL" होगा।

एल्गोरिदम (BFS लेवल के साथ)

  • levels := s के आकार की सूची -1 से भरी हुई, q := डीक्यू
  • प्रत्येक सूचकांक idx के लिए जहां s[idx] 'R' या 'L' है, (idx, 0, s[idx]) को क्यू में डालें
  • l := s के वर्णों की सूची
  • जब तक क्यू खाली नहीं है:
    • (idx, new_level, dir) := q.popleft()
    • यदि levels[idx] == -1:
      • levels[idx] = new_level, l[idx] = dir
      • यदि dir == "R" और idx+1 < len(l), तो (idx+1, new_level+1, dir) डालें
      • यदि dir == "L" और idx-1 >= 0, तो (idx-1, new_level+1, dir) डालें
    • अन्यथा यदि levels[idx] == new_level और l[idx] != dir, तो l[idx] = "@"
  • l को जोड़कर स्ट्रिंग वापस करें

उदाहरण

from collections import deque
class Solution:
    def solve(self, s):
        levels = [-1 for _ in s]
        q = deque()
        for idx in range(len(s)):
            if s[idx] in ("R", "L"):
                q.append((idx, 0, s[idx]))
        l = list(s)
        while q:
            idx, new_level, dir = q.popleft()
            if levels[idx] == -1:
                levels[idx] = new_level
                l[idx] = dir
                if dir == "R" and idx + 1 < len(l):
                    q.append((idx + 1, new_level + 1, dir))
                elif dir == "L" and idx - 1 >= 0:
                    q.append((idx - 1, new_level + 1, dir))
            elif levels[idx] == new_level:
                if l[idx] != dir:
                    l[idx] = "@"
        return "".join(l)

ob = Solution()
s = "@@L@R@@@@L"
print(ob.solve(s))

इनपुट

"@@L@R@@@@L"

आउटपुट

LLL@RRRLLL
  1. - Python में कूदकर स्थिति n तक पहुंच सकते हैं या नहीं जांचने का प्रोग्राम

    मान लीजिए 1 से n तक एक संख्या रेखा है। पहले हम स्थिति 0 पर हैं, स्थिति 1 पर जाने के लिए एक कदम कूदें, फिर स्थिति 3 तक पहुंचने के लिए दो स्थान कूदें, फिर स्थिति 6 तक पहुंचने के लिए तीन स्थान कूदें और इसी तरह। हमें जांचना है कि क्या इसे बनाए रखते हुए, हम स्थिति n तक पहुंच सकते हैं या नहीं।तो, यदि इनपु

  1. पायथन में बहुभुज को उसकी प्रारंभिक अवस्था में रीसेट करने का प्रोग्राम पायथन में बहुभुज को उसकी प्रारंभिक अवस्था में रीसेट करने का प्रोग्राम

    मान लीजिए, n शीर्षों, n फ्लिपिंग अक्षों, और n रोटेशन बिंदुओं वाला एक बहुभुज है। फ्लिपिंग अक्षों और रोटेशन बिंदुओं के लिए निम्न सत्य हैं:यदि n विषम है, तो प्रत्येक फ्लिपिंग अक्ष केवल एक शीर्ष और विपरीत भुजा के मध्य से गुजरता है।यदि n सम है, तो आधे अक्ष विपरीत शीर्षों की जोड़ी से गुजरते हैं और अन्य आध

  1. Python में इमारतों की अधिकतम ऊंचाई ज्ञात करें Python में इमारतों की अधिकतम ऊंचाई ज्ञात करें

    n इमारतें एक पंक्ति में (1 से n लेबल)। प्रतिबंध: restrictions[i] = (id, max_height)। नियम: ऊंचाई ≥ 0, पहली इमारत की ऊंचाई = 0, आसन्न इमारतों में ऊंचाई अंतर ≤ 1। अधिकतम संभव ऊंचाई खोजें। एल्गोरिदम: दो पास + शिखर गणना प्रतिबंधों को id द्वारा सॉर्ट करें फॉरवर्ड पास: बाएं से दाएं, प्रत्येक प्रतिबंध को