يتم إعطاؤك مقتطفًا برمجيًا يحسب قيمة المتغير "ans". مهمتك هي فهم المنطق الكامن وراء هذا الرمز وكتابة وظيفة تنجز نفس المهمة.

يقوم مقتطف الشفرة المقدم بحساب "الإجابة" بناءً على القواعد التالية:

1. قم بتهيئة الإجابة على 1.
2. في البداية، قم بتعيين التفاضل السابق (`d_p`) والتفاضل الحالي (`d_c`) على 0.
3. قم بالتكرار من خلال مجموعة من العناصر.
4. لكل تكرار:
   أ. قم بتحديث `d_c` بإضافة العنصر الحالي (`ll[i]`) إلى التفاضل السابق (`d_p`).
   ب. إذا كانت `d_c` أقل من أو تساوي قيمة معينة `x`، فقم بزيادة `ans` بمقدار 1.
   ج. اضبط `d_p` على `d_c` للتكرار التالي.
5. بعد التكرار عبر كافة العناصر، يحتفظ `ans` بالقيمة المطلوبة.

تحتاج إلى تنفيذ دالة `calculate_ans(n: int, x: int, ll: List[int]) -> int` التي تأخذ ثلاث معلمات:
- `n` (1 <= n <= 10^6) - عدد العناصر في القائمة `ll`.
- `x` (0 <= x <= 1000) - الحد الأقصى للقيمة المسموح بها لـ `d_c`.
- `ll` (length(ll) = n) - قائمة الأعداد الصحيحة التي تمثل العناصر.

يجب أن تقوم الدالة بإرجاع القيمة المحسوبة لـ `ans`.

على سبيل المثال، بالنظر إلى `n = 4` و`x = 5` و`ll = [2, 0, 3, 1]`، يجب أن تُرجع الدالة `4` للأسباب التالية:
- في التكرار الأول، `d_c = 0 + 2 = 2`، وهو أقل من أو يساوي `x`. لذلك، يصبح "an" هو "2".
- في التكرار الثاني، `d_c = 2 + 0 = 2`، وهو أقل من أو يساوي `x`. لذلك، يصبح "an" هو "3".
- في التكرار الثالث، `d_c = 2 + 3 = 5`، وهو ما يساوي `x`. لذلك، يصبح "an" هو "4".
- في التكرار الرابع، `d_c = 5 + 1 = 6`، وهو أكبر من `x`. لذلك، يبقى "الإجابة" هي "4".

مهمتك هي تنفيذ الدالة "calculate_ans" وإرجاع القيمة النهائية لـ "ans".
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}