Minesweeper एक लोकप्रिय गेम है। इसमें खिलाड़ी को संख्यात्मक संकेतों की मदद से बम ढूँढने होते हैं। ये संकेत बताते हैं कि किसी खाने के ठीक आसपास (आड़े, खड़े या तिरछे) कितने बम हैं।
आपको एक तैयार माइनस्वीपर बोर्ड के खाली खानों में माइनों की संख्या भरनी है।
बोर्ड एक आयत होता है, जो ऐसे खानों से बना है जो या तो खाली (' ') होते हैं या माइन ('*')।
हर खाली खाने के लिए यह गिनिए कि उसके आसपास आड़ी, खड़ी और तिरछी दिशाओं में कितने माइन हैं। अगर खाली खाने के आसपास कोई माइन नहीं है, तो उसे खाली ही छोड़ दीजिए। वरना उसकी जगह उसके आसपास के माइनों की संख्या लिख दीजिए।
उदाहरण के लिए, आपको 5 x 4 का ऐसा बोर्ड मिल सकता है (यहाँ खाली जगहों को स्क्रीन पर दिखाने के लिए '·' अक्षर से दर्शाया गया है):
·*·*·
··*··
··*··
·····
आपके कोड को इसे इस तरह बदलना चाहिए:
1*3*1
13*31
·2*2·
·111·
सभी इनपुट और आउटपुट ASCII में हैं।
Rust के String और &str utf8 होते हैं, इसलिए जहाँ हमें "Hello".chars() सरल लग सकता है, वहाँ असल में उसे हर अक्षर की जाँच करनी पड़ती है कि वह 1, 2, 3 या 4 u8 लंबा है या नहीं।
अगर हमें पता हो कि कोई &str ASCII है, तो हम .as_bytes() कॉल कर सकते हैं और अंदर के डेटा को &[u8] (बाइट स्लाइस) के रूप में देख सकते हैं।
ASCII बाइट्स के स्लाइस पर इटरेशन करना कहीं तेज़ होता है, क्योंकि इसमें कोई कोडपॉइंट शामिल नहीं होता: हर ASCII बाइट एक u8 लंबी होती है।
क्या आप इनपुट को क्लोन किए बिना यह चैलेंज पूरा कर सकते हैं?
Exercism पर साइन अप कीजिए और Rust को 99 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
हम नेस्टेड for लूप, बाउंड जाँच आसान बनाने के लिए min/max का चतुर उपयोग, फंक्शनल पाइपलाइन और द्वि-आयामी मैट्रिक्स देखेंगे।