ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# n0mn0m's solution

## to Space Age in the C# Track

Published at Oct 22 2020 · 0 comments
Instructions
Test suite
Solution

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

### SpaceAgeTests.cs

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

using Xunit;

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

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

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

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

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

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

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

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

public class SpaceAge
{
private const double EarthSecondsPerYear = 31_557_600D;
private const double MercuryYearsPerEarthYear = 0.2408467;
private const double VenusYearsPerEarthYear = 0.61519726;
private const double MarsYearsPerEarthYear = 1.8808158;
private const double JupiterYearsPerEarthYear = 11.862615;
private const double SaturnYearsPerEarthYear = 29.447498;
private const double UranusYearsPerEarthYear = 84.016846;
private const double NeptuneYearsPerEarthYear = 164.79132;

private double AgeInEarthSeconds { get; }
public SpaceAge(int seconds) => AgeInEarthSeconds = seconds;

public double OnEarth() => AgeInEarthSeconds / EarthSecondsPerYear;

public double OnMercury() => OnEarth() / MercuryYearsPerEarthYear;

public double OnVenus() => OnEarth() / VenusYearsPerEarthYear;

public double OnMars() => OnEarth() / MarsYearsPerEarthYear;

public double OnJupiter() => OnEarth() / JupiterYearsPerEarthYear;

public double OnSaturn() => OnEarth() / SaturnYearsPerEarthYear;

public double OnUranus() => OnEarth() / UranusYearsPerEarthYear;

public double OnNeptune() => OnEarth() / NeptuneYearsPerEarthYear;
}``````