Parcours
/
Cairo
Cairo
/
Exercices
/
Ère spatiale
Ère spatiale

Ère spatiale

Facile

Introduction

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.

Note

Si tu te demandes pourquoi Pluton n'a pas été retenue, va regarder cette vidéo YouTube.

Instructions

À 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
Note

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.

Implémentation

À 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.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Cairo Exercism

Prêt à commencer Ère spatiale ?

Inscris-toi sur Exercism pour apprendre et maîtriser Cairo avec 25 concepts68 exercices, et un vrai mentorat humain, le tout gratuitement.