بالنظر إلى موقع ملكتين على رقعة شطرنج، بيّن ما إذا كانتا في وضع يسمح لهما بمهاجمة إحداهما الأخرى أم لا.
في لعبة الشطرنج، تستطيع الملكة مهاجمة القطع التي تقع في الصف نفسه أو العمود نفسه أو القطر نفسه.
يمكن تمثيل رقعة الشطرنج بمصفوفة بحجم 8 في 8.
فإذا قيل لك إن الملكة البيضاء في c5 (بترقيم يبدأ من الصفر، أي العمود 2 والصف 3) والملكة السوداء في f2 (بترقيم يبدأ من الصفر، أي العمود 5 والصف 6)، فأنت تعرف أن الترتيب كالتالي:
وتستطيع أيضًا أن تجيب عما إذا كانت الملكتان قادرتين على مهاجمة إحداهما الأخرى. في هذه الحالة تكون الإجابة نعم، تستطيعان، لأن القطعتين تشتركان في القطر نفسه.
أنشأ صورة رقعة الشطرنج habere-et-dispertire باستخدام LaTeX وحزمة chessboard من إعداد Ulrike Fischer.
في الشطرنج، تُسمى الصفوف "ranks"، وتُسمى الأعمدة "files". تتراوح "ranks" من 1 إلى 8، بينما تتراوح "files" من A إلى H.
في هذا التمرين، Square هو نوع معتم يمثل مربعًا على رقعة الشطرنج.
يستخدم حقلي row وcolumn مفهرسين بدءًا من 0 داخليًا، ويضمن أنهما صالحان دائمًا (أي من 0 إلى 7).
تأخذ الدالة create قيمة Str كمدخل، وتمثل مربعًا صحيحًا على رقعة الشطرنج بالترميز الرسمي، مثل "C5".
يجب أن تحلل الدالة create قيمة Str هذه، وتتحقق من أنها تمثل مربعًا صحيحًا، وإذا كان الأمر كذلك فيجب أن تُرجع قيمة Square تحتوي على حقلي row وcolumn المناسبين.
الرتبة 1 تقابل الصف 0، والرتبة 8 تقابل الصف 7.
على سبيل المثال، يجب أن تُرجع create("C5") مربعًا بصف 4 وعمود 2.
يوفر نوع Square أيضًا طريقتين مفيدتين هما rank وfile.
في المثال أعلاه، يجب أن تُرجع rank العدد الصحيح 5، ويجب أن تُرجع file الحرف 'C'.
أخيرًا، تأخذ الدالة queen_can_attack قيمتي Square مختلفتين وتتحقق مما إذا كانت الملكات الموضوعة على هذين المربعين يمكنها مهاجمة بعضها بعضًا.
الخلاصة: الأنواع المعتمة مثل Square رائعة عندما تريد تقديم بعض الضمانات، مثل أن row وcolumn دائمًا بين 0 و7.
كما تخفي الأنواع المعتمة تفاصيل التنفيذ عن المستخدمين، مما يجعل API أكثر نظافة.
سجّل في Exercism لتتعلّم وتتقن Roc عبر 120 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.