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

पायथन में रोबोट सिमुलेशन चलना

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

  1. -2 बाएं 90 डिग्री मुड़ने के लिए
  2. -1 दाएं 90 डिग्री मुड़ने के लिए
  3. x इकाइयों को आगे बढ़ाने के लिए 1 से 9 तक का कोई भी मान
  4. कुछ ग्रिड वर्ग हैं जो बाधाएं हैं।

हमारे पास बाधा नामक एक और सरणी भी है, यह इंगित करता है कि i-th बाधा ग्रिड बिंदु पर है (बाधाएं [i] [0], बाधाएं [i] [1]), यदि रोबोट उन पर आगे बढ़ना चाहता है, तो रोबोट चालू रहता है इसके बजाय पिछला ग्रिड वर्ग।

हमें उस अधिकतम यूक्लिडियन दूरी का वर्ग ज्ञात करना है जो रोबोट मूल स्थान से होगा।

इसलिए, यदि इनपुट कमांड =[4,-1,4,-2,4], बाधाओं =[[2,4]] की तरह है, तो आउटपुट 65 होगा, क्योंकि रोबोट (1, 4) पर अटक जाएगा ) बाएं मुड़ने और (1, 8) पर जाने से पहले।

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

  • position_offset :=[(0, 1) ,(1, 0) ,(0, -1),(-1, 0) ]
  • x, y, दिशा, max_distance को 0 के रूप में प्रारंभ करें
  • कमांड में प्रत्येक कमांड के लिए, करें
    • यदि कमांड -2 के समान है, तो
      • दिशा:=(दिशा -1) मॉड 4
    • अन्यथा जब कमांड -1 के समान हो, तो
      • दिशा:=(दिशा + 1) मॉड 4
    • अन्यथा,
      • (x_off, y_off) :=position_offset[direction]
    • जबकि कमांड गैर-शून्य है, करें
      • यदि (x + x_off, y + y_off) बाधाओं में नहीं है, तो
        • x :=x + x_off
        • y :=y + y_off
      • कमांड:=कमांड - 1
    • max_distance =अधिकतम_distance, x^2 + y^2
  • अधिकतम_दूरी लौटें

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

उदाहरण

class Solution:
   def robotSim(self, commands, obstacles):
      position_offset = [(0, 1), (1, 0), (0, -1), (-1, 0)]
      obstacles = set(map(tuple, obstacles))
      x, y, direction, max_distance = 0, 0, 0, 0
      for command in commands:
         if command == -2: direction = (direction - 1) % 4
            elif command == -1: direction = (direction + 1) % 4
               else:
                  x_off, y_off = position_offset[direction]
                  while command:
                     if (x + x_off, y + y_off) not in obstacles:
                        x += x_off
                        y += y_off
                     command -= 1
                  max_distance = max(max_distance, x**2 + y**2)
      return max_distance
ob = Solution()
print(ob.robotSim([4,-1,4,-2,4],[[2,4]]))

इनपुट

[4,-1,4,-2,4],[[2,4]]

आउटपुट

65

  1. issuperset () पायथन में

    इस लेख में, हम पायथन में issuperset() और विभिन्न क्षेत्रों में इसके कार्यान्वयन के बारे में जानेंगे। यह विधि बूलियन ट्रू लौटाती है यदि एक सेट बी के सभी तत्वों में सभी तत्व सेट ए होते हैं जो एक तर्क के रूप में पारित होते हैं और यदि ए के सभी तत्व बी में मौजूद नहीं होते हैं तो झूठा रिटर्न देता है। इस

  1. पायथन में सिमपी का उपयोग करके असतत घटना सिमुलेशन की मूल बातें

    SimPy (ब्लिम्पी के साथ गाया जाता है) प्रक्रिया-उन्मुख असतत-घटना सिमुलेशन के लिए एक अजगर पैकेज है। इंस्टॉलेशन सिमपी को स्थापित करने का सबसे आसान तरीका पाइप के माध्यम से है: pip install simpy और आपको जो आउटपुट मिल सकता है वह कुछ इस तरह होगा, लेखन के समय, simpy-3.0.11, SimPy का नवीनतम संस्करण है,

  1. पायथन में अंडरस्कोर (_)

    पायथन में कुछ मामलों में हम सिंगल अंडरस्कोर (_) का उपयोग करते हैं और कुछ मामलों में हम डबल अंडरस्कोर (__) का उपयोग करते हैं। पायथन में निम्नलिखित मामले हैं, जहां हम अंडरस्कोर का उपयोग करते हैं। अगर हम दुभाषिए में लास्ट एक्सप्रेशन की वैल्यू स्टोर करना चाहते हैं। यदि हम कुछ मूल्यों को अनदेखा करना चा