في إحدى الأمسيات، عثرت على دفتر قديم مليء بخربشات غامضة، وكأن أحدهم كان يطارد فكرة بلا هوادة. في إحدى الصفحات، برز سؤال واحد: هل يستطيع كل عدد أن يجد طريقه إلى 1؟ وكان مرتبطًا بشيء يُسمى حدسية كولاتز، وهي أحجية حيّرت المفكرين لعقود.
كانت القواعد بسيطة ظاهريًا. اختر أي عدد صحيح موجب.
ثم كرّر هذه الخطوات على الناتج، واستمر بلا نهاية.
وبدافع الفضول، اخترت العدد 12 لتجربته وبدأت الرحلة:
12 ➜ 6 ➜ 3 ➜ 10 ➜ 5 ➜ 16 ➜ 8 ➜ 4 ➜ 2 ➜ 1
وبالعدّ من العدد الثاني (6)، استغرقت تسع خطوات للوصول إلى 1، وفي كل مرة كانت القواعد تتكرر، كان العدد يتغير باستمرار. في البداية، بدا التسلسل غير متوقع، يقفز صعودًا وهبوطًا وفي كل اتجاه. ومع ذلك، تؤكد الحدسية أنه مهما كان عدد البداية، فسننتهي دائمًا عند 1.
كان الأمر مذهلًا، لكنه محيّر أيضًا. لماذا يبدو هذا ناجحًا دائمًا؟ هل يمكن أن يوجد عدد تتعطل عنده العملية، فيدور في حلقة لا نهاية لها أو يهرب إلى ما لا نهاية؟ أشار الدفتر إلى أن حل هذه المسألة قد يكشف شيئًا عميقًا، ومعه ينتظر الشهرة والثروة ومكانة في التاريخ كل من يستطيع فك ألغازها.
بالنظر إلى عدد صحيح موجب، أرجِع عدد الخطوات اللازمة للوصول إلى 1 وفقًا لقواعد حدسية كولاتز.
في هذا التمرين عليك إضافة مجموعة أخطاء ComputationError تحتوي على الخطأ IllegalArgument.
تذكّر أن تجعلها عامة!
يجب أن تُرجع الدالة steps الخطأ ComputationError.IllegalArgument عندما يكون مدخلها مساويًا لصفر.
عادةً ما تحذف التمارين اللاحقة تعليمات صريحة مثل هذه. وعمومًا، تتوقع منك Exercism أن تقرأ ملف الاختبار عند تنفيذ حلّك.
لمزيد من التفاصيل حول الأخطاء في Zig، راجع:
سجّل في Exercism لتتعلّم وتتقن Zig عبر 104 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.