L'anno è il 2525 e hai appena intrapreso un viaggio per visitare tutti i pianeti del Sistema Solare (Mercurio, Venere, Terra, Marte, Giove, Saturno, Urano e Nettuno). La prima tappa è Mercurio, dove la dogana richiede che tu compili un modulo (a quanto pare, la burocrazia non è una prerogativa della Terra). Mentre consegni il modulo al doganiere, questi lo esamina con attenzione e aggrotta la fronte. «Ti aspetti davvero che creda che tu abbia solo 50 anni? Devi essere più vicino ai 200!»
Divertito, aspetti che il doganiere inizi a ridere, ma sembra essere serissimo. Ti rendi conto che hai inserito la tua età in anni terrestri, ma il doganiere se l'aspettava in anni mercuriani! Dato che il periodo orbitale di Mercurio intorno al Sole è notevolmente più breve di quello della Terra, in anni mercuriani sei in realtà molto più vecchio. Dopo qualche calcolo veloce, riesci a fornire la tua età in anni mercuriani. Il doganiere sorride, soddisfatto, e ti fa cenno di passare. Ti riprometti di precalcolare la tua età specifica per ogni pianeta prima dei futuri controlli doganali, per evitare simili confusioni.
Se ti stai chiedendo perché Plutone non è stato incluso, guarda questo video su YouTube.
Data un'età in secondi, calcola quanti anni avrebbe una persona su un pianeta del nostro sistema solare.
Un anno terrestre equivale a 365.25 giorni terrestri, ovvero 31,557,600 secondi. Se ti dicessero che qualcuno ha 1,000,000,000 secondi di vita, la sua età sarebbe di 31.69 anni terrestri.
Per gli altri pianeti, devi tenere conto del loro periodo orbitale in anni terrestri:
| Pianeta | Periodo orbitale in anni terrestri |
|---|---|
| Mercury | 0.2408467 |
| Venus | 0.61519726 |
| Earth | 1.0 |
| Mars | 1.8808158 |
| Jupiter | 11.862615 |
| Saturn | 29.447498 |
| Uranus | 84.016846 |
| Neptune | 164.79132 |
La durata effettiva di un'orbita completa della Terra intorno al Sole è più vicina a 365.256 giorni (1 anno siderale). Il calendario gregoriano ha, in media, 365.2425 giorni. Pur non essendo del tutto preciso, 365.25 è il valore usato in questo esercizio. Vedi Anno su Wikipedia per altri modi di misurare un anno.
In Cairo, dove non esiste un supporto nativo per i numeri in virgola mobile, rappresentiamo i valori frazionari usando numeri interi.
Questo approccio è essenziale nello sviluppo blockchain per mantenere la precisione nei calcoli.
In questo esercizio, usiamo l'aritmetica in virgola fissa convertendo i periodi orbitali in microsecondi.
Ad esempio, il periodo orbitale di Mercurio di 0.2408467 anni terrestri diventa 240,846,700 microsecondi se moltiplicato per 1,000,000.
Per tenere conto della precisione decimale, i casi di test presuppongono che l'età risultante abbia due cifre decimali, rappresentate come numeri interi.
Ciò significa che un'età di 31.69 anni viene memorizzata come 3169 nel codice.
Per ottenere questo, moltiplichiamo per 100 prima di eseguire la divisione.
Ecco un esempio:
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
Usando questo metodo, i valori frazionari vengono rappresentati accuratamente come numeri interi, mantenendo la precisione richiesta di due cifre decimali, cosa cruciale perché i test passino.
Iscriviti a Exercism per imparare e padroneggiare Cairo con 25 concetti68 esercizi e il mentoring di persone reali, tutto gratis.