mirror of
https://github.com/rjNemo/exercism-elixir
synced 2026-06-06 02:16:48 +00:00
40 lines
1.4 KiB
Elixir
40 lines
1.4 KiB
Elixir
defmodule SpaceAge do
|
|
@type planet ::
|
|
:mercury
|
|
| :venus
|
|
| :earth
|
|
| :mars
|
|
| :jupiter
|
|
| :saturn
|
|
| :uranus
|
|
| :neptune
|
|
|
|
@seconds_in_earth_year 31_557_600
|
|
@seconds_in_mercury_year 0.2408467 * @seconds_in_earth_year
|
|
@seconds_in_venus_year 0.61519726 * @seconds_in_earth_year
|
|
@seconds_in_mars_year 1.8808158 * @seconds_in_earth_year
|
|
@seconds_in_jupiter_year 11.862615 * @seconds_in_earth_year
|
|
@seconds_in_saturn_year 29.447498 * @seconds_in_earth_year
|
|
@seconds_in_uranus_year 84.016846 * @seconds_in_earth_year
|
|
@seconds_in_neptune_year 164.79132 * @seconds_in_earth_year
|
|
|
|
@doc """
|
|
Return the number of years a person that has lived for 'seconds' seconds is
|
|
aged on 'planet', or an error if 'planet' is not a planet.
|
|
"""
|
|
@spec age_on(planet, pos_integer) :: {:ok, float} | {:error, String.t()}
|
|
def age_on(planet, seconds) do
|
|
case planet do
|
|
:mercury -> {:ok, seconds / @seconds_in_mercury_year}
|
|
:venus -> {:ok, seconds / @seconds_in_venus_year}
|
|
:earth -> {:ok, seconds / @seconds_in_earth_year}
|
|
:mars -> {:ok, seconds / @seconds_in_mars_year}
|
|
:jupiter -> {:ok, seconds / @seconds_in_jupiter_year}
|
|
:saturn -> {:ok, seconds / @seconds_in_saturn_year}
|
|
:uranus -> {:ok, seconds / @seconds_in_uranus_year}
|
|
:neptune -> {:ok, seconds / @seconds_in_neptune_year}
|
|
# sorry pluto
|
|
_ -> {:error, "not a planet"}
|
|
end
|
|
end
|
|
end
|