मान लीजिए कि एक अनंत ग्रिड पर एक रोबोट है जो बिंदु (0, 0) से शुरू होता है। इसका मुख उत्तर दिशा की ओर है। अब रोबोट तीन संभावित प्रकार के आदेशों में से एक प्राप्त कर सकता है -
- -2 बाएं 90 डिग्री मुड़ने के लिए
- -1 दाएं 90 डिग्री मुड़ने के लिए
- x इकाइयों को आगे बढ़ाने के लिए 1 से 9 तक का कोई भी मान
- कुछ ग्रिड वर्ग हैं जो बाधाएं हैं।
हमारे पास बाधा नामक एक और सरणी भी है, यह इंगित करता है कि 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
- यदि (x + x_off, y + y_off) बाधाओं में नहीं है, तो
- max_distance =अधिकतम_distance, x^2 + y^2
- यदि कमांड -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