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