O ano é 2525 e você acaba de embarcar em uma jornada para visitar todos os planetas do Sistema Solar (Mercúrio, Vênus, Terra, Marte, Júpiter, Saturno, Urano e Netuno). A primeira parada é Mercúrio, onde a alfândega exige que você preencha um formulário (aparentemente a burocracia não é exclusividade da Terra). Quando você entrega o formulário ao fiscal da alfândega, ele o examina com atenção e franze a testa. "Você realmente espera que eu acredite que tem apenas 50 anos? Você deve estar mais perto dos 200 anos!"
Você acha que é brincadeira e espera que o fiscal comece a rir, mas ele parece estar falando completamente sério. Você percebe que informou sua idade em anos terrestres, mas o fiscal esperava anos mercurianos! Como o período orbital de Mercúrio ao redor do Sol é bem mais curto que o da Terra, você na verdade é bem mais velho em anos mercurianos. Depois de alguns cálculos rápidos, você consegue informar sua idade em anos mercurianos. O fiscal sorri, satisfeito, e faz sinal para você passar. Você anota mentalmente para calcular de antemão sua idade em cada planeta antes das próximas verificações alfandegárias, para evitar confusões assim.
Se você está se perguntando por que Plutão ficou de fora, assista a este vídeo do YouTube.
Dada uma idade em segundos, calcule quantos anos alguém teria em um planeta do nosso Sistema Solar.
Um ano terrestre equivale a 365.25 dias terrestres, ou 31,557,600 segundos. Se você soubesse que alguém tem 1,000,000,000 segundos de idade, essa idade seria 31.69 anos terrestres.
Para os outros planetas, você precisa levar em conta o período orbital deles em anos terrestres:
| Planeta | Período orbital em anos terrestres |
|---|---|
| Mercury | 0.2408467 |
| Venus | 0.61519726 |
| Earth | 1.0 |
| Mars | 1.8808158 |
| Jupiter | 11.862615 |
| Saturn | 29.447498 |
| Uranus | 84.016846 |
| Neptune | 164.79132 |
A duração real de uma órbita completa da Terra ao redor do Sol é mais próxima de 365.256 dias (1 ano sideral). O calendário gregoriano tem, em média, 365.2425 dias. Embora não seja totalmente preciso, 365.25 é o valor usado neste exercício. Veja Ano na Wikipédia para conhecer outras formas de medir um ano.
Em Cairo, onde não há suporte nativo a números de ponto flutuante, representamos valores fracionários usando inteiros.
Essa abordagem é essencial no desenvolvimento de blockchain para manter a precisão nos cálculos.
Neste exercício, usamos aritmética de ponto fixo, convertendo os períodos orbitais em microssegundos.
Por exemplo, o período orbital de Mercúrio, de 0.2408467 anos terrestres, se torna 240,846,700 microssegundos ao multiplicar por 1,000,000.
Para levar em conta a precisão decimal, os casos de teste assumem que a idade resultante tem duas casas decimais, representadas como inteiros.
Isso significa que uma idade de 31.69 anos é armazenada como 3169 no código.
Para isso, multiplicamos por 100 antes de fazer a divisão.
Veja um exemplo:
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 esse método, você garante que os valores fracionários sejam representados com precisão como inteiros, mantendo a precisão de duas casas decimais exigida, o que é crucial para que os testes passem.
Crie sua conta no Exercism para aprender e dominar Cairo com 25 conceitos68 exercícios e mentoria humana de verdade, tudo de graça.