ruby - space-age

This commit is contained in:
James Walker 2018-10-09 11:10:49 -04:00
parent 94188b6236
commit 1430211502
Signed by: walkah
GPG Key ID: 3C127179D6086E93
3 changed files with 146 additions and 0 deletions

48
ruby/space-age/README.md Normal file
View File

@ -0,0 +1,48 @@
# Space Age
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](http://www.youtube.com/watch?v=Z_2gbGXzFbs).
* * * *
For installation and learning resources, refer to the
[exercism help page](http://exercism.io/languages/ruby).
For running the tests provided, you will need the Minitest gem. Open a
terminal window and run the following command to install minitest:
gem install minitest
If you would like color output, you can `require 'minitest/pride'` in
the test file, or note the alternative instruction, below, for running
the test file.
Run the tests from the exercise directory using the following command:
ruby space_age_test.rb
To include color from the command line:
ruby -r minitest/pride space_age_test.rb
## Source
Partially inspired by Chapter 1 in Chris Pine's online Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=01](http://pine.fm/LearnToProgram/?Chapter=01)
## Submitting Incomplete Solutions
It's possible to submit an incomplete solution so you can see how others have completed the exercise.

View File

@ -0,0 +1,40 @@
# SpaceAge class
class SpaceAge
EARTH_YEAR_IN_SECONDS = 31_557_600
def initialize(age_in_seconds)
@age_in_seconds = age_in_seconds
end
def on_earth
@age_in_seconds.to_f / EARTH_YEAR_IN_SECONDS.to_f
end
def on_mercury
on_earth / 0.2408467
end
def on_venus
on_earth / 0.61519726
end
def on_mars
on_earth / 1.8808158
end
def on_jupiter
on_earth / 11.862615
end
def on_saturn
on_earth / 29.447498
end
def on_uranus
on_earth / 84.016846
end
def on_neptune
on_earth / 164.79132
end
end

View File

@ -0,0 +1,58 @@
require 'minitest/autorun'
require_relative 'space_age'
# Common test data version: 1.1.0 8d4df79
class SpaceAgeTest < Minitest::Test
# assert_in_delta will pass if the difference
# between the values being compared is less
# than the allowed delta
DELTA = 0.01
def test_age_on_earth
# skip
age = SpaceAge.new(1_000_000_000)
assert_in_delta 31.69, age.on_earth, DELTA
end
def test_age_on_mercury
# skip
age = SpaceAge.new(2_134_835_688)
assert_in_delta 280.88, age.on_mercury, DELTA
end
def test_age_on_venus
# skip
age = SpaceAge.new(189_839_836)
assert_in_delta 9.78, age.on_venus, DELTA
end
def test_age_on_mars
# skip
age = SpaceAge.new(2_329_871_239)
assert_in_delta 39.25, age.on_mars, DELTA
end
def test_age_on_jupiter
# skip
age = SpaceAge.new(901_876_382)
assert_in_delta 2.41, age.on_jupiter, DELTA
end
def test_age_on_saturn
# skip
age = SpaceAge.new(3_000_000_000)
assert_in_delta 3.23, age.on_saturn, DELTA
end
def test_age_on_uranus
# skip
age = SpaceAge.new(3_210_123_456)
assert_in_delta 1.21, age.on_uranus, DELTA
end
def test_age_on_neptune
# skip
age = SpaceAge.new(8_210_123_456)
assert_in_delta 1.58, age.on_neptune, DELTA
end
end