summary refs log tree commit diff stats
path: root/c/space-age/src/space_age.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/space-age/src/space_age.c')
-rw-r--r--c/space-age/src/space_age.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/c/space-age/src/space_age.c b/c/space-age/src/space_age.c
new file mode 100644
index 0000000..36502de
--- /dev/null
+++ b/c/space-age/src/space_age.c
@@ -0,0 +1,35 @@
+#include "space_age.h"
+
+#define EARTH_YEAR_IN_SECONDS 31557600
+
+#define MERCURY_YEAR_IN_EARTH_YEARS 0.2408467f
+#define VENUS_YEAR_IN_EARTH_YEARS 0.61519726f
+#define EARTH_YEAR_IN_EARTH_YEARS 1.0f
+#define MARS_YEAR_IN_EARTH_YEARS 1.8808158f
+#define JUPITER_YEAR_IN_EARTH_YEARS 11.862615f
+#define SATURN_YEAR_IN_EARTH_YEARS 29.447498f
+#define URANUS_YEAR_IN_EARTH_YEARS 84.016846f
+#define NEPTUNE_YEAR_IN_EARTH_YEARS 164.79132f
+
+float age(planet_t planet, int64_t seconds) {
+    switch (planet) {
+    case MERCURY:
+        return seconds / (MERCURY_YEAR_IN_EARTH_YEARS * EARTH_YEAR_IN_SECONDS);
+    case VENUS:
+        return seconds / (VENUS_YEAR_IN_EARTH_YEARS * EARTH_YEAR_IN_SECONDS);
+    case EARTH:
+        return seconds / (EARTH_YEAR_IN_EARTH_YEARS * EARTH_YEAR_IN_SECONDS);
+    case MARS:
+        return seconds / (MARS_YEAR_IN_EARTH_YEARS * EARTH_YEAR_IN_SECONDS);
+    case JUPITER:
+        return seconds / (JUPITER_YEAR_IN_EARTH_YEARS * EARTH_YEAR_IN_SECONDS);
+    case SATURN:
+        return seconds / (SATURN_YEAR_IN_EARTH_YEARS * EARTH_YEAR_IN_SECONDS);
+    case URANUS:
+        return seconds / (URANUS_YEAR_IN_EARTH_YEARS * EARTH_YEAR_IN_SECONDS);
+    case NEPTUNE:
+        return seconds / (NEPTUNE_YEAR_IN_EARTH_YEARS * EARTH_YEAR_IN_SECONDS);
+    default:
+        return -1;
+    }
+}