Estamos en el año 2525 y acabas de emprender un viaje para visitar todos los planetas del sistema solar (Mercurio, Venus, la Tierra, Marte, Júpiter, Saturno, Urano y Neptuno). La primera parada es Mercurio, donde la aduana te exige llenar un formulario (al parecer, la burocracia no es exclusiva de la Tierra). Cuando entregas el formulario al agente de aduanas, este lo examina con atención y frunce el ceño. «¿De verdad esperas que te crea que solo tienes 50 años? ¡Debes tener cerca de 200 años!».
Te hace gracia y esperas que el agente de aduanas se ría, pero parece estar completamente en serio. Te das cuenta de que escribiste tu edad en años terrestres, pero el agente esperaba que la dieras en años mercurianos. Como el periodo orbital de Mercurio alrededor del sol es mucho más corto que el de la Tierra, en realidad eres bastante mayor en años mercurianos. Después de unos cálculos rápidos, puedes dar tu edad en años mercurianos. El agente de aduanas sonríe, satisfecho, y te indica que pases. Te propones calcular de antemano tu edad en cada planeta antes de futuros controles de aduana, para evitar este tipo de confusiones.
Si te preguntas por qué Plutón no entró en la lista, mira este video de YouTube.
Dada una edad en segundos, calcula qué edad tendría alguien en un planeta de nuestro sistema solar.
Un año terrestre equivale a 365.25 días terrestres, o 31,557,600 segundos. Si te dijeran que alguien tiene 1,000,000,000 segundos de edad, su edad sería de 31.69 años terrestres.
Para los demás planetas, tienes que tener en cuenta su período orbital en años terrestres:
| Planeta | Período orbital en años terrestres |
|---|---|
| Mercurio | 0.2408467 |
| Venus | 0.61519726 |
| Tierra | 1.0 |
| Marte | 1.8808158 |
| Júpiter | 11.862615 |
| Saturno | 29.447498 |
| Urano | 84.016846 |
| Neptuno | 164.79132 |
La duración real de una órbita completa de la Tierra alrededor del Sol se acerca más a 365.256 días (1 año sidéreo). El calendario gregoriano tiene, en promedio, 365.2425 días. Aunque no es del todo exacto, 365.25 es el valor que se usa en este ejercicio. Consulta Año en Wikipedia para ver más formas de medir un año.
En Cairo, donde no hay soporte nativo para los números de punto flotante, representamos los valores fraccionarios usando enteros.
Este enfoque es esencial en el desarrollo de blockchain para mantener la precisión en los cálculos.
En este ejercicio, usamos aritmética de punto fijo convirtiendo los períodos orbitales en microsegundos.
Por ejemplo, el período orbital de Mercurio de 0.2408467 años terrestres se convierte en 240,846,700 microsegundos al multiplicarlo por 1,000,000.
Para tener en cuenta la precisión decimal, los casos de prueba asumen que la edad resultante tiene dos decimales, representados como enteros.
Esto significa que una edad de 31.69 años se almacena como 3169 en el código.
Para lograr esto, multiplicamos por 100 antes de hacer la división.
Aquí tienes un ejemplo:
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
Con este método, te aseguras de que los valores fraccionarios se representen con precisión como enteros y, al mismo tiempo, mantienes la precisión de dos decimales requerida, lo cual es crucial para que las pruebas pasen.
Regístrate en Exercism para aprender y dominar Cairo con 25 conceptos68 ejercicios y mentoría humana real, todo gratis.