دشت گل

دشت گل

متوسط

مقدمه

Flower Field بازآفرینیِ مهربانانه‌ای از بازی محبوب Minesweeper است. هدف بازی این است که با کمک سرنخ‌های عددی، همه‌ی گل‌های باغ را پیدا کنید. این سرنخ‌ها نشان می‌دهند که چند گل به‌طور مستقیم (افقی، عمودی یا قطری) مجاور یک خانه قرار دارد. «Flower Field» در نسخه‌های منطقه‌ای Microsoft Windows در ایتالیا، آلمان، کره‌ی جنوبی، ژاپن و تایوان عرضه شد.

دستورالعمل‌ها

وظیفه‌ی شما این است که در یک باغ کامل‌شده‌ی «میدان گل»، تعداد گل‌ها را به خانه‌های خالی اضافه کنید. خود باغ یک صفحه‌ی مستطیلی است که از خانه‌هایی تشکیل شده که یا خالی‌اند (' ') یا یک گل دارند ('*').

برای هر خانه‌ی خالی، تعداد گل‌های مجاور آن را بشمارید (به‌صورت افقی، عمودی و قطری). اگر خانه‌ی خالی هیچ گل مجاوری ندارد، آن را خالی بگذارید. در غیر این صورت، آن را با تعداد گل‌های مجاور جایگزین کنید.

برای مثال، ممکن است صفحه‌ای ۵ × ۴ به این شکل به دستتان برسد (فضاهای خالی اینجا برای نمایش روی صفحه با نویسه‌ی '·' نشان داده شده‌اند):

·*·*·
··*··
··*··
·····

که کد شما باید آن را به این تبدیل کند:

1*3*1
13*31
·2*2·
·111·

نکته‌ی کارایی

همه‌ی ورودی‌ها و خروجی‌ها در قالب ASCII هستند. Stringها و &strها در Rust با utf8 کدگذاری می‌شوند، بنابراین ممکن است انتظار داشته باشید که "Hello".chars() ساده باشد، اما در واقع باید هر نویسه را بررسی کند تا ببیند طولش ۱، ۲، ۳ یا ۴ تا u8 است. اگر بدانیم یک &str از نوع ASCII است، می‌توانیم .as_bytes() را فراخوانی کنیم و به داده‌ی زیربنایی به‌صورت یک &[u8] (برش بایت) اشاره کنیم. پیمایش روی یک برش از بایت‌های ASCII بسیار سریع‌تر است، چون هیچ کدپوینتی در کار نیست؛ هر بایت ASCII به‌اندازه‌ی یک u8 است.

آیا می‌توانید این چالش را بدون کلون کردن ورودی به پایان برسانید؟

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Rust Exercism

آماده‌اید دشت گل را شروع کنید؟

در Exercism ثبت‌نام کنید تا Rust را همراه با 99 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.

بررسی عمیق دشت گل!

حلقه‌های For تودرتو، استفاده‌ی هوشمندانه از `min` و `max` برای ساده کردن بررسی محدوده‌ها، پایپ‌لاین‌های تابعی و استفاده از ماتریس‌های دوبعدی را بررسی می‌کنیم.