المسارات
/
Groovy
Groovy
/
التمارين
/
محاكي الروبوت
محاكي الروبوت

محاكي الروبوت

سهل

التعليمات

اكتب محاكي روبوت.

يحتاج مرفق اختبار في مصنع للروبوتات إلى برنامج للتحقق من حركات الروبوت.

للروبوتات ثلاث حركات ممكنة:

  • الاستدارة يمينًا
  • الاستدارة يسارًا
  • التقدّم

توضع الروبوتات على شبكة افتراضية لا نهائية، وهي متجهة نحو اتجاه معين (الشمال أو الشرق أو الجنوب أو الغرب) عند مجموعة من الإحداثيات {x,y}، مثل {3,8}، حيث تزداد الإحداثيات نحو الشمال والشرق.

ثم يتلقى الروبوت عددًا من التعليمات، وعندها يتحقق مرفق الاختبار من موضع الروبوت الجديد، ومن الاتجاه الذي يشير إليه.

  • تعني السلسلة النصية المكوّنة من الحروف "RAALAL" ما يلي:
    • الاستدارة يمينًا
    • التقدّم مرتين
    • الاستدارة يسارًا
    • التقدّم مرة واحدة
    • الاستدارة يسارًا مرة أخرى
  • لنفترض أن روبوتًا يبدأ عند {7, 3} متجهًا نحو الشمال. عند تشغيل هذه التعليمات بالترتيب سيصبح عند {9, 4} متجهًا نحو الغرب.

الخصائص والحقول في Groovy

في هذا التمرين، ربما لاحظت أن الهيكل الابتدائي يعرّف دوال جلب، مثل getX()، لكن الاختبارات تصل إلى القيمة مباشرة عبر .x. ويعود ذلك إلى الطريقة التي يعرّف بها Groovy الخصائص. لنُفصّل الأمر:

  • الحقل عضو في صنف أو واجهة أو سمة، ويُستخدم لتخزين البيانات.
  • الخاصية ميزة ظاهرة من الخارج لصنف.

نقاط أساسية حول خصائص Groovy:

  • يولّد Groovy تلقائيًا دوال الجلب والإسناد للحقول غير الخاصة (أو دالة الجلب فقط إذا كان الحقل معلَّمًا بـ final).
  • يمكن الوصول إلى الخصائص بالاسم (كما في اختبار هذا التمرين)، وستستدعي دالة الجلب أو الإسناد بشكل شفاف.
  • بحسب الاصطلاح، سيتعرّف Groovy على الخصائص حتى لو لم يوجد حقل داعم، شرط وجود دوال جلب أو إسناد.

في هذا التمرين، حدّدنا دوال الجلب المطلوبة فقط (ومن ثَمّ الخصائص على النحو الوارد أعلاه) لضمان التنفيذ السليم. ولك حرية اختيار الحقول (وأنواعها) الأنسب لحلك.

إذا أردت التوسع في موضوع الحقول والخصائص، فراجع الفصل 3.3. الحقول والخصائص في وثائق Groovy.


المصدر

مستوحًى من سؤال مقابلة في شركة شهيرة.
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Groovy Exercism

مستعد لبدء محاكي الروبوت؟

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