نحن في عام 2525، وقد شرعت للتو في رحلة لزيارة جميع كواكب المجموعة الشمسية (عطارد، الزهرة، الأرض، المريخ، المشتري، زحل، أورانوس ونبتون). المحطة الأولى هي عطارد، حيث تطلب منك الجمارك تعبئة استمارة (يبدو أن البيروقراطية ليست حكرًا على الأرض). وبينما تسلّم الاستمارة إلى موظف الجمارك، يدقق فيها ويقطّب جبينه. «هل تتوقع حقًا أن أصدّق أن عمرك 50 سنة فقط؟ لا بد أن عمرك يقترب من 200 سنة!»
وأنت مستمتع، تنتظر أن يبدأ موظف الجمارك بالضحك، لكنه يبدو جادًا للغاية. تدرك أنك أدخلت عمرك بـ_سنوات الأرض_، لكن الموظف كان يتوقعه بـ_سنوات عطارد_! ولأن مدة دوران عطارد حول الشمس أقصر بكثير من مدة دوران الأرض، فأنت في الحقيقة أكبر سنًا بكثير بعمر عطارد. وبعد بعض الحسابات السريعة، تتمكن من تقديم عمرك بسنوات عطارد. يبتسم موظف الجمارك، راضيًا، ويشير لك بالمرور. وتسجّل في ذهنك أن تحسب عمرك الخاص بكل كوكب قبل فحوص الجمارك المستقبلية، لتجنّب مثل هذه الالتباسات.
إذا كنت تتساءل عن سبب استبعاد بلوتو، فشاهد هذا الفيديو على يوتيوب.
إذا أُعطيت عمرًا بالثواني، فاحسب كم سيكون عمر شخص ما على أحد كواكب مجموعتنا الشمسية.
السنة الأرضية الواحدة تساوي 365.25 يومًا أرضيًا، أو 31,557,600 ثانية. وإذا قيل لك إن عمر شخص ما 1,000,000,000 ثانية، فسيكون عمره 31.69 سنة أرضية.
أما بقية الكواكب، فعليك أن تراعي فترة دورانها مقيسة بالسنوات الأرضية:
| الكوكب | فترة الدوران بالسنوات الأرضية |
|---|---|
| عطارد | 0.2408467 |
| الزهرة | 0.61519726 |
| الأرض | 1.0 |
| المريخ | 1.8808158 |
| المشتري | 11.862615 |
| زحل | 29.447498 |
| أورانوس | 84.016846 |
| نبتون | 164.79132 |
الطول الفعلي لدورة كاملة واحدة للأرض حول الشمس أقرب إلى 365.256 يومًا (سنة نجمية واحدة). ويبلغ متوسط عدد أيام التقويم الغريغوري 365.2425 يومًا. ورغم أن القيمة 365.25 ليست دقيقة تمامًا، فهي القيمة المستخدمة في هذا التمرين. راجع Year on Wikipedia لمعرفة مزيد من الأساليب لقياس السنة.
في Cairo، حيث لا يوجد دعم أصلي للأعداد ذات الفاصلة العائمة، نمثّل القيم الكسرية باستخدام الأعداد الصحيحة.
هذا الأسلوب ضروري في تطوير البلوك تشين للحفاظ على الدقة في الحسابات.
في هذا التمرين، نستخدم الحساب ذا الفاصلة الثابتة عبر تحويل الفترات المدارية إلى ميكروثوانٍ.
على سبيل المثال، تصبح الفترة المدارية لعطارد البالغة 0.2408467 من سنوات الأرض 240,846,700 ميكروثانية عند ضربها في 1,000,000.
لمراعاة الدقة العشرية، تفترض حالات الاختبار أن العمر الناتج يحتوي على خانتين عشريتين، ممثَّلًا بأعداد صحيحة.
وهذا يعني أن عمرًا قدره 31.69 سنة يُخزَّن على هيئة 3169 في الكود.
ولتحقيق ذلك، نضرب في 100 قبل إجراء القسمة.
إليك مثالًا:
let mercury_orbital_period = 240_846_700; // in microseconds
let age_microseconds = age_seconds * 1_000_000;
// multiplying with 100 to retain 2 decimal places
age_microseconds * 100 / mercury_orbital_period
باستخدام هذه الطريقة، تضمن تمثيل القيم الكسرية بدقة على هيئة أعداد صحيحة، مع الحفاظ على الدقة العشرية المطلوبة بخانتين، وهو أمر ضروري لنجاح الاختبارات.
سجّل في Exercism لتتعلّم وتتقن Cairo عبر 25 مفهومًا68 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.