# neiesc's solution

## to Space Age in the C# Track

Published at Apr 03 2019 · 0 comments
Instructions
Test suite
Solution

#### Note:

This exercise has changed since this solution was written.

Given an age in seconds, calculate how old someone would be on:

• Earth: orbital period 365.25 Earth days, or 31557600 seconds
• Mercury: orbital period 0.2408467 Earth years
• Venus: orbital period 0.61519726 Earth years
• Mars: orbital period 1.8808158 Earth years
• Jupiter: orbital period 11.862615 Earth years
• Saturn: orbital period 29.447498 Earth years
• Uranus: orbital period 84.016846 Earth years
• Neptune: orbital period 164.79132 Earth years

So if you were told someone were 1,000,000,000 seconds old, you should be able to say that they're 31.69 Earth-years old.

If you're wondering why Pluto didn't make the cut, go watch this youtube video.

## Running the tests

To run the tests, run the command `dotnet test` from within the exercise directory.

Initially, only the first test will be enabled. This is to encourage you to solve the exercise one step at a time. Once you get the first test passing, remove the `Skip` property from the next test and work on getting that test passing. Once none of the tests are skipped and they are all passing, you can submit your solution using `exercism submit SpaceAge.cs`

## Further information

For more detailed information about the C# track, including how to get help if you're having trouble, please visit the exercism.io C# language page.

## Source

Partially inspired by Chapter 1 in Chris Pine's online Learn to Program tutorial. http://pine.fm/LearnToProgram/?Chapter=01

### SpaceAgeTest.cs

``````// This file was auto-generated based on version 1.2.0 of the canonical data.

using Xunit;

public class SpaceAgeTest
{
[Fact]
public void Age_on_earth()
{
var sut = new SpaceAge(1000000000);
Assert.Equal(31.69, sut.OnEarth(), precision: 2);
}

[Fact(Skip = "Remove to run test")]
public void Age_on_mercury()
{
var sut = new SpaceAge(2134835688);
Assert.Equal(280.88, sut.OnMercury(), precision: 2);
}

[Fact(Skip = "Remove to run test")]
public void Age_on_venus()
{
var sut = new SpaceAge(189839836);
Assert.Equal(9.78, sut.OnVenus(), precision: 2);
}

[Fact(Skip = "Remove to run test")]
public void Age_on_mars()
{
var sut = new SpaceAge(2129871239);
Assert.Equal(35.88, sut.OnMars(), precision: 2);
}

[Fact(Skip = "Remove to run test")]
public void Age_on_jupiter()
{
var sut = new SpaceAge(901876382);
Assert.Equal(2.41, sut.OnJupiter(), precision: 2);
}

[Fact(Skip = "Remove to run test")]
public void Age_on_saturn()
{
var sut = new SpaceAge(2000000000);
Assert.Equal(2.15, sut.OnSaturn(), precision: 2);
}

[Fact(Skip = "Remove to run test")]
public void Age_on_uranus()
{
var sut = new SpaceAge(1210123456);
Assert.Equal(0.46, sut.OnUranus(), precision: 2);
}

[Fact(Skip = "Remove to run test")]
public void Age_on_neptune()
{
var sut = new SpaceAge(1821023456);
Assert.Equal(0.35, sut.OnNeptune(), precision: 2);
}
}``````
``````using System;
using System.Collections.Generic;

public class SpaceAge
{
private int SecondsTotal { get; set; }
private const double EarthOrbitalPeriodSecondsPerYear = 365.25 * 24 * 60 * 60;
private Dictionary<string, double> PlanetsOrbitalPeriodSecondsPerYear = new Dictionary<string, double>() {
{"Mercury", 0.2408467 * EarthOrbitalPeriodSecondsPerYear},
{"Venus", 0.61519726 * EarthOrbitalPeriodSecondsPerYear},
{"Mars", 1.8808158 * EarthOrbitalPeriodSecondsPerYear},
{"Jupiter", 11.862615 * EarthOrbitalPeriodSecondsPerYear},
{"Saturn", 29.447498 * EarthOrbitalPeriodSecondsPerYear},
{"Uranus", 84.016846 * EarthOrbitalPeriodSecondsPerYear},
{"Neptune", 164.79132 * EarthOrbitalPeriodSecondsPerYear},
};

public SpaceAge(int seconds)
{
SecondsTotal = seconds;
}

public double OnEarth()
{
return SecondsTotal / EarthOrbitalPeriodSecondsPerYear;
}

public double OnMercury()
{
return SecondsTotal / PlanetsOrbitalPeriodSecondsPerYear.GetValueOrDefault("Mercury");
}

public double OnVenus()
{
return SecondsTotal / PlanetsOrbitalPeriodSecondsPerYear.GetValueOrDefault("Venus");
}

public double OnMars()
{
return SecondsTotal / PlanetsOrbitalPeriodSecondsPerYear.GetValueOrDefault("Mars");
}

public double OnJupiter()
{
return SecondsTotal / PlanetsOrbitalPeriodSecondsPerYear.GetValueOrDefault("Jupiter");
}

public double OnSaturn()
{
return SecondsTotal / PlanetsOrbitalPeriodSecondsPerYear.GetValueOrDefault("Saturn");
}

public double OnUranus()
{
return SecondsTotal / PlanetsOrbitalPeriodSecondsPerYear.GetValueOrDefault("Uranus");
}

public double OnNeptune()
{
return SecondsTotal / PlanetsOrbitalPeriodSecondsPerYear.GetValueOrDefault("Neptune");
}
}``````