ट्रैक
/
Go
Go
/
अभ्यास
/
रोबोट सिम्युलेटर
रोबोट सिम्युलेटर

रोबोट सिम्युलेटर

मध्यम

निर्देश

एक रोबोट सिम्युलेटर लिखिए।

रोबोट बनाने वाले एक कारखाने के परीक्षण केंद्र को एक ऐसा प्रोग्राम चाहिए जो रोबोट की गतियों की जाँच करे।

रोबोट तीन तरह की गतियाँ कर सकते हैं:

  • दाएँ मुड़ना
  • बाएँ मुड़ना
  • आगे बढ़ना

रोबोट को एक काल्पनिक अनंत ग्रिड पर रखा जाता है। हर रोबोट का कोई {x,y} निर्देशांक होता है, जैसे {3,8}, और उसका मुँह किसी एक दिशा (north, east, south या west) की ओर होता है। इस ग्रिड में निर्देशांक north और east की ओर बढ़ते हैं।

इसके बाद रोबोट को कई निर्देश मिलते हैं। तब परीक्षण केंद्र जाँचता है कि रोबोट की नई स्थिति क्या है और उसका मुँह किस दिशा की ओर है।

  • अक्षरों की स्ट्रिंग "RAALAL" का मतलब यह है:
    • दाएँ मुड़ना
    • दो बार आगे बढ़ना
    • बाएँ मुड़ना
    • एक बार आगे बढ़ना
    • फिर एक बार और बाएँ मुड़ना
  • मान लीजिए एक रोबोट {7, 3} पर है और उसका मुँह north की ओर है। अब इन निर्देशों को चलाने पर वह {9, 4} पर पहुँचना चाहिए और उसका मुँह west की ओर होना चाहिए।

कार्यान्वयन नोट्स

टेस्ट को 3 चरणों में बाँटा गया है।

सभी टेस्ट go test से चलाइए, या फिर -tags विकल्प के साथ कुछ खास टेस्ट चलाइए।

उदाहरण:

go test                      # run all tests
go test -tags step1          # run just step 1 tests.
go test -tags 'step1 step2'  # run step1 and step2 tests

आपको defs.go सोर्स फाइल दी गई है, जिसमें कई ऐसी चीज़ें परिभाषित हैं जिनकी ज़रूरत टेस्ट प्रोग्राम को होती है। यह चरण के हिसाब से तीन भागों में बाँटा गया है।

चरण 1

चरण 1 पूरा करने के लिए आपको Right, Left, Advance, N, S, E, W और Dir परिभाषित करने हैं। चरण 2 पर आगे बढ़ने से पहले चरण 1 पूरा कीजिए।

चरण 2

चरण 1 में आपने रोबोट की हरकतें कार्यान्वित कीं, लेकिन यह कोई खास सिमुलेशन नहीं है। उदाहरण के लिए, सोर्स कोड में "रोबोट" कहाँ है? "ग्रिड" कहाँ है? वे गणनाएँ कहाँ हैं जो रोबोट की हरकतों को ग्रिड की स्थितियों में बदलती हैं, रोबोट में या ग्रिड में? भौतिक दुनिया अलग होती है।

चरण 2 एक "कमरा" का परिचय देता है। यह छोटा-सा जोड़ लगता है, लेकिन हम "कमरे", "रोबोट" और "टेस्ट प्रोग्राम" की भूमिकाएँ साफ करने के लिए बड़े बदलाव करेंगे, और सिमुलेशन की भौतिकी स्पष्ट करना शुरू करेंगे। आप Room और Robot को फंक्शन के रूप में परिभाषित करेंगे, जिन्हें टेस्ट प्रोग्राम goroutine के रूप में शुरू करके "अस्तित्व में लाता है"। सूचना टेस्ट प्रोग्राम, रोबोट और कमरे के बीच Go चैनल के ज़रिए आती-जाती है।

Room को एक "भौतिकी इंजन" मानिए, यानी ऐसी चीज़ जो दीवारों और एक रोबोट वाले भौतिक कमरे का मॉडल बनाकर उसका सिमुलेशन करती है। इसे किसी तरह कमरे की निर्देशांक व्यवस्था, रोबोट और दीवारों की जगह का मॉडल बनाना चाहिए, और उदाहरण के लिए यह सुनिश्चित करना चाहिए कि रोबोट दीवारों के आर-पार न चल दे। हम चाहते हैं कि Robot एक ऐसा एजेंट हो जो क्रियाएँ करे, लेकिन हम चाहते हैं कि Room एक सुसंगत सत्य बनाए रखे।

टेस्ट प्रोग्राम चैनल बनाता है और Room तथा Robot दोनों को शुरू करता है। फिर टेस्ट प्रोग्राम Robot को कमांड भेजता है। कमांड भेजना पूरा होने पर टेस्ट प्रोग्राम कमांड चैनल बंद कर देता है। Robot को कमांड स्वीकार करने चाहिए और Room को उन क्रियाओं के बारे में बताना चाहिए जो वह करने की कोशिश कर रहा है। जब उसे पता चले कि कमांड चैनल बंद हो रहा है, तो उसे खुद को बंद कर लेना चाहिए। कमरे को रोबोट की क्रियाओं के भौतिक परिणामों को समझना चाहिए। जब उसे पता चलता है कि रोबोट बंद हो रहा है, तो वह टेस्ट प्रोग्राम को एक अंतिम रिपोर्ट भेजता है, जिसमें रोबोट की अंतिम स्थिति और दिशा बताई जाती है।

चरण 3

चरण 3 में तीन बड़े बदलाव हैं:

  • रोबोट अलग-अलग कमांड पर जवाब देने के बजाय स्क्रिप्ट चलाते हैं।
  • एक लॉग चैनल की मदद से रोबोट और कमरा संदेश लॉग कर सकते हैं।
  • कमरा कई रोबोटों को एक साथ रहने और काम करने की सुविधा देता है।

Room3 से भेजी जाने वाली अंतिम स्थिति रिपोर्ट के लिए, आप रोबोट चैनल से मिली वही स्लाइस लौटा सकते हैं, बस उसकी स्थितियाँ और दिशाएँ अपडेट करके। इनके लिए लॉग चैनल पर संदेश भेजे जाने चाहिए:

  • बिना नाम वाला रोबोट
  • एक जैसे नाम वाले रोबोट
  • एक ही जगह रखे गए रोबोट
  • कमरे के बाहर रखा गया रोबोट
  • स्क्रिप्ट में कोई अपरिभाषित कमांड
  • किसी अज्ञात रोबोट की क्रिया
  • दीवार की ओर आगे बढ़ने की कोशिश करने वाला रोबोट
  • दूसरे रोबोट की ओर आगे बढ़ने की कोशिश करने वाला रोबोट

स्रोत

एक प्रसिद्ध कंपनी के इंटरव्यू सवाल से प्रेरित।
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Go Exercism

रोबोट सिम्युलेटर शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Go को 34 कॉन्सेप्ट165 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।