মাইনসুইপার একটি জনপ্রিয় গেম, যেখানে ব্যবহারকারীকে সংখ্যাসূচক ইঙ্গিতের সাহায্যে মাইনগুলো খুঁজে বের করতে হয়। এই ইঙ্গিতগুলো জানায়, একটি ঘরের ঠিক পাশে (আনুভূমিক, উল্লম্ব বা কর্ণ বরাবর) কতটি মাইন আছে।
আপনার কাজ হলো একটি সম্পূর্ণ মাইনসুইপার বোর্ডের খালি ঘরগুলোতে মাইনের সংখ্যা যোগ করা। বোর্ডটি একটি আয়তক্ষেত্র, যা এমন ঘর দিয়ে গঠিত যেগুলো হয় খালি (' '), নয়তো মাইন ('*')।
প্রতিটি খালি ঘরের জন্য তার সংলগ্ন মাইনের সংখ্যা গণনা করুন (অনুভূমিক, উলম্ব ও তির্যকভাবে)। খালি ঘরটির আশেপাশে কোনো মাইন না থাকলে সেটি খালি রাখুন। নাহলে সেটিকে সংলগ্ন মাইনের সংখ্যা দিয়ে বদলে দিন।
উদাহরণস্বরূপ, আপনি এমন একটি 5 x 4 বোর্ড পেতে পারেন (স্ক্রিনে দেখানোর জন্য এখানে খালি জায়গাগুলো '·' অক্ষর দিয়ে দেখানো হয়েছে):
·*·*·
··*··
··*··
·····
এবং আপনার কোড এটিকে এভাবে রূপান্তর করবে:
1*3*1
13*31
·2*2·
·111·
সব ইনপুট ও আউটপুট ASCII-তে থাকে।
Rust-এর String ও &str হলো utf8, তাই "Hello".chars() সহজ হবে ভেবে কেউ ভাবতেই পারে, কিন্তু আসলে এটিকে প্রতিটি char পরীক্ষা করে দেখতে হয় সেটি ১, ২, ৩ নাকি ৪টি u8 লম্বা।
যদি আমরা জানি যে একটি &str আসলে ASCII, তাহলে আমরা .as_bytes() কল করতে পারি এবং অন্তর্নিহিত ডেটাকে একটি &[u8] (বাইট স্লাইস) হিসেবে ধরতে পারি।
ASCII বাইটের একটি স্লাইসের উপর ইটারেশন অনেক বেশি দ্রুত, কারণ এতে কোনো কোডপয়েন্ট জড়িত থাকে না - প্রতিটি ASCII বাইট এক u8 লম্বা।
ইনপুট ক্লোন না করেই কি আপনি চ্যালেঞ্জটি সম্পূর্ণ করতে পারবেন?
Exercism-এ সাইন আপ করুন, Rust ট্র্যাকের 99টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
আমরা দেখব নেস্টেড for লুপ, বাউন্ড চেকিং সহজ করতে min/max-এর চতুর ব্যবহার, ফাংশনাল পাইপলাইন আর দ্বিমাত্রিক ম্যাট্রিক্সের ব্যবহার।