Era espacial

Era espacial

Fácil

Introdução

O ano é 2525 e acabaste de embarcar numa viagem para visitar todos os planetas do Sistema Solar (Mercúrio, Vénus, Terra, Marte, Júpiter, Saturno, Úrano e Neptuno). A primeira paragem é Mercúrio, onde as alfândegas exigem que preenchas um formulário (aparentemente a burocracia não é exclusiva da Terra). Quando entregas o formulário ao funcionário da alfândega, ele examina-o com atenção e franze o sobrolho. «Achas mesmo que vou acreditar que tens apenas 50 anos? Deves estar mais perto dos 200 anos!»

Achas piada e esperas que o funcionário da alfândega comece a rir, mas ele parece estar perfeitamente sério. Percebes então que indicaste a tua idade em anos terrestres, mas o funcionário esperava-a em anos mercurianos! Como o período orbital de Mercúrio à volta do Sol é bastante mais curto do que o da Terra, na verdade és muito mais velho em anos mercurianos. Depois de alguns cálculos rápidos, consegues indicar a tua idade em anos mercurianos. O funcionário da alfândega sorri, satisfeito, e faz-te sinal para seguires. Ficas com a nota mental de calcular antecipadamente a tua idade em cada planeta antes de futuras verificações alfandegárias, para evitares este tipo de confusões.

Note

Se estás a pensar porque é que Plutão ficou de fora, vê este vídeo do YouTube.

Instruções

Dada uma idade em segundos, calcula que idade teria alguém num planeta do nosso Sistema Solar.

Um ano terrestre equivale a 365,25 dias terrestres, ou 31 557 600 segundos. Se te dissessem que alguém tinha 1 000 000 000 segundos de idade, essa pessoa teria 31,69 anos terrestres.

Para os outros planetas, tens de ter em conta o período orbital em anos terrestres:

Planeta Período orbital em anos terrestres
Mercúrio 0,2408467
Vénus 0,61519726
Terra 1,0
Marte 1,8808158
Júpiter 11,862615
Saturno 29,447498
Úrano 84,016846
Neptuno 164,79132
Note

O comprimento real de uma órbita completa da Terra em torno do Sol é mais próximo de 365,256 dias (1 ano sideral). O calendário gregoriano tem, em média, 365,2425 dias. Embora não seja totalmente exato, 365,25 é o valor usado neste exercício. Vê Ano na Wikipédia para mais formas de medir um ano.

Implementação

Em Cairo, onde não há suporte nativo para números de vírgula flutuante, representamos os valores fracionários com números inteiros.

Esta abordagem é essencial no desenvolvimento de blockchain para manter a precisão nos cálculos.

Neste exercício, usamos aritmética de vírgula fixa, convertendo os períodos orbitais em microssegundos.

Por exemplo, o período orbital de Mercúrio, de 0.2408467 anos terrestres, passa a ser 240,846,700 microssegundos depois de multiplicar por 1,000,000.

Para ter em conta a precisão decimal, os casos de teste assumem que a idade resultante tem duas casas decimais, representadas como números inteiros.

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

Aqui está 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

Ao usar este método, garantes que os valores fracionários são representados com exatidão como números inteiros e manténs a precisão de duas casas decimais exigida, o que é crucial para que os testes passem.

Editar via GitHub A ligação abre numa nova janela ou separador
Cairo Exercism

Estás pronto para começar Era espacial?

Inscreve-te no Exercism para aprenderes e dominares Cairo com 25 conceitos68 exercícios, e mentoria humana real, tudo grátis.