الإغلاقات ومولد تسلسل مع ذاكرة
JavaScript
Hard
closures
مهمة «الإغلاقات ومولد تسلسل مع ذاكرة»
نفذ الدالة `createSequenceGenerator`، التي تأخذ قيمة أولية وخطوة. تُرجع الدالة كائنًا بطريقتين: `next()` و `reset()`. الطريقة `next()` تُرجع القيمة التالية من المتتالية (بدءًا من القيمة الأولية، وتزداد بالخطوة في كل استدعاء). الطريقة `reset()` تعيد تعيين المتتالية إلى القيمة الأولية. بالإضافة إلى ذلك، يجب أن تتذكر الطريقة `next()` جميع القيم المُنشأة في مصفوفة، يمكن الوصول إليها عبر الخاصية `history` للكائن. يجب حماية الخاصية `history` من التعديل الخارجي المباشر، ولكن يجب أن تكون قابلة للقراءة. استخدم الإغلاقات (closures) لتغليف الحالة.
تنسيق الإدخال
السطر الأول: القيمة الأولية (عدد صحيح).
السطر الثاني: الخطوة (عدد صحيح).
السطر التالي يحتوي على الأوامر: 'next' (استدعاء next()) أو 'reset' (استدعاء reset()).
تتكرر الأوامر حتى نهاية الإدخال.
تنسيق الإخراج
لكل أمر 'next'، أخرج القيمة الحالية للتسلسل. بالنسبة لـ 'reset'، لا تخرج شيئًا.
أمثلة
مثال 1
الإدخال
10
-3
next
next
next
reset
next
الإخراج
10
7
4
10
مثال 2
الإدخال
2
7 13
الإخراج
91
main.js