كانسة الألغام لعبة شائعة يبحث فيها اللاعب عن الألغام بمساعدة تلميحات رقمية تشير إلى عدد الألغام المجاورة للمربع مباشرةً (أفقيًا، وعموديًا، وقطريًا).
مهمتك هي إضافة أعداد الألغام إلى المربعات الفارغة في لوحة كانسة الألغام مكتملة.
اللوحة نفسها مستطيل مكوّن من مربعات، وكل مربع إما فارغ (' ') وإما لغم ('*').
لكل مربع فارغ، احسب عدد الألغام المجاورة له (أفقيًا، وعموديًا، وقطريًا). إذا لم يكن للمربع الفارغ أي ألغام مجاورة، فاتركه فارغًا. وإلا فاستبدله بعدد الألغام المجاورة له.
على سبيل المثال، قد تستلم لوحة بأبعاد 5 × 4 مثل هذه (المسافات الفارغة ممثلة هنا بالرمز '·' لعرضها على الشاشة):
·*·*·
··*··
··*··
·····
والتي ينبغي أن يحوّلها الكود إلى هذه:
1*3*1
13*31
·2*2·
·111·
كل المدخلات والمخرجات بترميز ASCII.
تُخزَّن قيم String و&str في Rust بترميز utf8، لذا فرغم أن المرء قد يتوقع أن تكون "Hello".chars() بسيطة، فإنها في الحقيقة تفحص كل حرف لتتحقق مما إذا كان طوله 1 أو 2 أو 3 أو 4 من u8.
إذا عرفنا أن &str بترميز ASCII، فيمكننا استدعاء .as_bytes() والتعامل مع البيانات الكامنة باعتبارها &[u8] (شريحة بايتات).
التكرار على شريحة من بايتات ASCII أسرع بكثير، لأنه لا توجد نقاط ترميزية، فكل بايت ASCII طوله u8 واحد.
هل يمكنك إتمام التحدي دون استنساخ المدخل؟
سجّل في Exercism لتتعلّم وتتقن Rust عبر 99 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.
نستكشف حلقات `for` المتداخلة، والاستخدام الذكي لـ `min`/`max` لتبسيط التحقق من الحدود، وخطوط الأنابيب الوظيفية، واستخدام المصفوفات ثنائية الأبعاد.