يتم إعطاؤك مقتطف التعليمات البرمجية الذي يعلن عن نوع التعداد "الاتجاه" و
مجموعة من الهياكل `الموقف`. يمثل تعداد "الاتجاه" ثمانية
الاتجاهات المحتملة: `أعلى`، `أسفل`، `يسار`، `يمين`، `أعلى`، `أسفل`، `يسار`،
و "صحيح". يمثل هيكل "الموضع" موضعًا ثنائي الأبعاد على الشبكة و
يحتوي على عضوين صحيحين: `x` و`y`. بالإضافة إلى ذلك، هناك مصفوفة `constexpr`
"directionVectors" الذي يحتوي على متجهات الاتجاه لكل اتجاه ممثل
بواسطة قيم التعداد. وأخيرًا، هناك دالة مضمّنة `constexpr` `getVector`
يأخذ قيمة "الاتجاه" ويعيد متجه الاتجاه المقابل.

مهمتك هي تنفيذ وظيفة "movePosition" التي تأخذ "Position".
كائن وقيمة "الاتجاه"، وإرجاع كائن "الموضع" الجديد وهو
نتيجة لتحريك الموضع المحدد في الاتجاه المحدد. الحركة هي
تقتصر على أبعاد شبكة ثنائية الأبعاد، مما يعني أن أي حركة
يقع خارج حدود الشبكة ويجب أن يلتف حول الجانب الآخر من
شبكة.

قم بتنفيذ الوظيفة "Position movePosition(const Position&position, Direction Direction)".

** التوقيع الوظيفي **
```CPP
موضع الحركة (الموضع الثابت والموضع، اتجاه الاتجاه)
```

**مدخل**
- تأخذ الدالة وسيطتين:
  - `الموضع` (1 <= `الموضع.x`، `الموضع.y` <= 100): كائن من النوع `الموضع`
    تمثل الموضع الأولي على الشبكة.
  - `الاتجاه` (قيمة `الاتجاه` صالحة): قيمة تعداد تمثل
    الاتجاه الذي سيتم فيه تحريك الموضع على الشبكة.

**انتاج**
- يجب أن تقوم الدالة بإرجاع كائن "الموضع" الذي يمثل الموضع الجديد بعد ذلك
  التحرك في الاتجاه المحدد.

**ملحوظة**
- الشبكة عبارة عن شبكة ملتفة ثنائية الأبعاد، حيث إذا تحرك موضع ما خارج الحدود،
  يلتف حول الجانب الآخر من الشبكة. على سبيل المثال، إذا كان الموقف
  يتحرك خارج الحد العلوي، ويظهر في الحد السفلي.

**مثال**
```CPP
الموضع الأولي = {2، 3}؛
تحرك الاتجاه = للأسفل؛

نتيجة الموضع = movePosition(initial, move);
// النتيجة = {2، 4}
```
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}