summary refs log tree commit diff stats
path: root/c/space-age/src
diff options
context:
space:
mode:
Diffstat (limited to 'c/space-age/src')
-rw-r--r--c/space-age/src/space_age.c35
-rw-r--r--c/space-age/src/space_age.h19
2 files changed, 54 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;
+    }
+}
diff --git a/c/space-age/src/space_age.h b/c/space-age/src/space_age.h
new file mode 100644
index 0000000..5c96478
--- /dev/null
+++ b/c/space-age/src/space_age.h
@@ -0,0 +1,19 @@
+#ifndef SPACE_AGE_H
+#define SPACE_AGE_H
+
+#include <stdint.h>
+
+typedef enum {
+   MERCURY,
+   VENUS,
+   EARTH,
+   MARS,
+   JUPITER,
+   SATURN,
+   URANUS,
+   NEPTUNE,
+} planet_t;
+
+float age(planet_t planet, int64_t seconds);
+
+#endif