المسارات
/
Rust
Rust
/
التمارين
/
كانسة الألغام
كانسة الألغام

كانسة الألغام

متوسط

مقدمة

كانسة الألغام لعبة شائعة يبحث فيها اللاعب عن الألغام بمساعدة تلميحات رقمية تشير إلى عدد الألغام المجاورة للمربع مباشرةً (أفقيًا، وعموديًا، وقطريًا).

التعليمات

مهمتك هي إضافة أعداد الألغام إلى المربعات الفارغة في لوحة كانسة الألغام مكتملة. اللوحة نفسها مستطيل مكوّن من مربعات، وكل مربع إما فارغ (' ') وإما لغم ('*').

لكل مربع فارغ، احسب عدد الألغام المجاورة له (أفقيًا، وعموديًا، وقطريًا). إذا لم يكن للمربع الفارغ أي ألغام مجاورة، فاتركه فارغًا. وإلا فاستبدله بعدد الألغام المجاورة له.

على سبيل المثال، قد تستلم لوحة بأبعاد 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 واحد.

هل يمكنك إتمام التحدي دون استنساخ المدخل؟

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Rust Exercism

مستعد لبدء كانسة الألغام؟

سجّل في Exercism لتتعلّم وتتقن Rust عبر 99 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.

تعمّق في كانسة الألغام!

نستكشف حلقات `for` المتداخلة، والاستخدام الذكي لـ `min`/`max` لتبسيط التحقق من الحدود، وخطوط الأنابيب الوظيفية، واستخدام المصفوفات ثنائية الأبعاد.