ruby - space-age
This commit is contained in:
parent
94188b6236
commit
1430211502
48
ruby/space-age/README.md
Normal file
48
ruby/space-age/README.md
Normal 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.
|
40
ruby/space-age/space_age.rb
Normal file
40
ruby/space-age/space_age.rb
Normal 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
|
58
ruby/space-age/space_age_test.rb
Normal file
58
ruby/space-age/space_age_test.rb
Normal 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
|
Loading…
x
Reference in New Issue
Block a user