एक रोबोट सिम्युलेटर लिखिए।
रोबोट बनाने वाले एक कारखाने के परीक्षण केंद्र को एक ऐसा प्रोग्राम चाहिए जो रोबोट की गतियों की जाँच करे।
रोबोट तीन तरह की गतियाँ कर सकते हैं:
रोबोट को एक काल्पनिक अनंत ग्रिड पर रखा जाता है। हर रोबोट का कोई {x,y} निर्देशांक होता है, जैसे {3,8}, और उसका मुँह किसी एक दिशा (north, east, south या west) की ओर होता है। इस ग्रिड में निर्देशांक north और east की ओर बढ़ते हैं।
इसके बाद रोबोट को कई निर्देश मिलते हैं। तब परीक्षण केंद्र जाँचता है कि रोबोट की नई स्थिति क्या है और उसका मुँह किस दिशा की ओर है।
टेस्ट को 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 पूरा करने के लिए आपको Right, Left, Advance, N, S, E, W और Dir परिभाषित करने हैं। चरण 2 पर आगे बढ़ने से पहले चरण 1 पूरा कीजिए।
चरण 1 में आपने रोबोट की हरकतें कार्यान्वित कीं, लेकिन यह कोई खास सिमुलेशन नहीं है। उदाहरण के लिए, सोर्स कोड में "रोबोट" कहाँ है? "ग्रिड" कहाँ है? वे गणनाएँ कहाँ हैं जो रोबोट की हरकतों को ग्रिड की स्थितियों में बदलती हैं, रोबोट में या ग्रिड में? भौतिक दुनिया अलग होती है।
चरण 2 एक "कमरा" का परिचय देता है। यह छोटा-सा जोड़ लगता है, लेकिन हम "कमरे", "रोबोट" और "टेस्ट प्रोग्राम" की भूमिकाएँ साफ करने के लिए बड़े बदलाव करेंगे, और सिमुलेशन की भौतिकी स्पष्ट करना शुरू करेंगे। आप Room और Robot को फंक्शन के रूप में परिभाषित करेंगे, जिन्हें टेस्ट प्रोग्राम goroutine के रूप में शुरू करके "अस्तित्व में लाता है"। सूचना टेस्ट प्रोग्राम, रोबोट और कमरे के बीच Go चैनल के ज़रिए आती-जाती है।
Room को एक "भौतिकी इंजन" मानिए, यानी ऐसी चीज़ जो दीवारों और एक रोबोट वाले भौतिक कमरे का मॉडल बनाकर उसका सिमुलेशन करती है। इसे किसी तरह कमरे की निर्देशांक व्यवस्था, रोबोट और दीवारों की जगह का मॉडल बनाना चाहिए, और उदाहरण के लिए यह सुनिश्चित करना चाहिए कि रोबोट दीवारों के आर-पार न चल दे। हम चाहते हैं कि Robot एक ऐसा एजेंट हो जो क्रियाएँ करे, लेकिन हम चाहते हैं कि Room एक सुसंगत सत्य बनाए रखे।
टेस्ट प्रोग्राम चैनल बनाता है और Room तथा Robot दोनों को शुरू करता है। फिर टेस्ट प्रोग्राम Robot को कमांड भेजता है। कमांड भेजना पूरा होने पर टेस्ट प्रोग्राम कमांड चैनल बंद कर देता है। Robot को कमांड स्वीकार करने चाहिए और Room को उन क्रियाओं के बारे में बताना चाहिए जो वह करने की कोशिश कर रहा है। जब उसे पता चले कि कमांड चैनल बंद हो रहा है, तो उसे खुद को बंद कर लेना चाहिए। कमरे को रोबोट की क्रियाओं के भौतिक परिणामों को समझना चाहिए। जब उसे पता चलता है कि रोबोट बंद हो रहा है, तो वह टेस्ट प्रोग्राम को एक अंतिम रिपोर्ट भेजता है, जिसमें रोबोट की अंतिम स्थिति और दिशा बताई जाती है।
चरण 3 में तीन बड़े बदलाव हैं:
Room3 से भेजी जाने वाली अंतिम स्थिति रिपोर्ट के लिए, आप रोबोट चैनल से मिली वही स्लाइस लौटा सकते हैं, बस उसकी स्थितियाँ और दिशाएँ अपडेट करके। इनके लिए लॉग चैनल पर संदेश भेजे जाने चाहिए:
Exercism पर साइन अप कीजिए और Go को 34 कॉन्सेप्ट165 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।