Nous sommes en 2525 et tu viens de te lancer dans un voyage pour visiter toutes les planètes du système solaire (Mercure, Vénus, la Terre, Mars, Jupiter, Saturne, Uranus et Neptune). La première escale est Mercure, où la douane t'oblige à remplir un formulaire (la bureaucratie n'est visiblement pas propre à la Terre). Alors que tu tends le formulaire à l'agent des douanes, il l'examine et fronce les sourcils. « Tu t'attends vraiment à ce que je croie que tu n'as que 50 ans ? Tu dois plutôt avoir dans les 200 ans ! »
Amusé, tu attends que l'agent des douanes éclate de rire, mais il a l'air on ne peut plus sérieux. Tu comprends alors que tu as indiqué ton âge en années terrestres, alors que l'agent l'attendait en années mercuriennes ! Comme la période orbitale de Mercure autour du soleil est nettement plus courte que celle de la Terre, tu es en réalité bien plus âgé en années mercuriennes. Après quelques calculs rapides, tu parviens à donner ton âge en années mercuriennes. L'agent des douanes sourit, satisfait, et te fait signe de passer. Tu prends mentalement note de pré-calculer ton âge sur chaque planète avant les prochains contrôles douaniers, pour éviter ce genre de méprise.
Si tu te demandes pourquoi Pluton n'a pas été retenue, va regarder cette vidéo YouTube.
À partir d'un âge en secondes, calcule quel âge aurait quelqu'un sur une planète de notre système solaire.
Une année terrestre équivaut à 365,25 jours terrestres, soit 31 557 600 secondes. Si on te disait que quelqu'un a 1 000 000 000 de secondes, son âge serait de 31,69 années terrestres.
Pour les autres planètes, tu dois tenir compte de leur période orbitale exprimée en années terrestres :
| Planète | Période orbitale en années terrestres |
|---|---|
| Mercure | 0.2408467 |
| Vénus | 0.61519726 |
| Terre | 1.0 |
| Mars | 1.8808158 |
| Jupiter | 11.862615 |
| Saturne | 29.447498 |
| Uranus | 84.016846 |
| Neptune | 164.79132 |
La durée réelle d'une orbite complète de la Terre autour du Soleil est plus proche de 365,256 jours (1 année sidérale). Le calendrier grégorien compte, en moyenne, 365,2425 jours. Sans être tout à fait exacte, la valeur 365,25 est celle utilisée dans cet exercice. Voir Année sur Wikipédia pour découvrir d'autres façons de mesurer une année.
À Cairo, où les nombres à virgule flottante ne sont pas pris en charge nativement, on représente les valeurs fractionnaires à l'aide d'entiers.
Cette approche est essentielle dans le développement blockchain pour préserver la précision des calculs.
Dans cet exercice, on utilise l'arithmétique à virgule fixe en convertissant les périodes orbitales en microsecondes.
Par exemple, la période orbitale de Mercure, soit 0.2408467 année terrestre, devient 240,846,700 microsecondes lorsqu'on la multiplie par 1,000,000.
Pour tenir compte de la précision décimale, les cas de test supposent que l'âge obtenu comporte deux décimales, représentées sous forme d'entiers.
Cela signifie qu'un âge de 31.69 ans est stocké sous la forme 3169 dans le code.
Pour y parvenir, on multiplie par 100 avant d'effectuer la division.
Voici un exemple :
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
Avec cette méthode, tu t'assures que les valeurs fractionnaires sont représentées avec précision sous forme d'entiers, tout en conservant les deux décimales requises, ce qui est indispensable pour que les tests passent.
Inscris-toi sur Exercism pour apprendre et maîtriser Cairo avec 25 concepts68 exercices, et un vrai mentorat humain, le tout gratuitement.