الإغلاقات ومولد تسلسل مع ذاكرة

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