Last active
August 29, 2015 14:27
-
-
Save eternal44/8294dac904a95298b487 to your computer and use it in GitHub Desktop.
Leap year exercise
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# doctest: correct century leap year | |
# >> query_leap_year[400] | |
# => true | |
# doctest: false century leap year | |
# >> query_leap_year[300] | |
# => false | |
# doctest: correct normal leap year | |
# >> query_leap_year[304] | |
# => true | |
# doctest: normal year tests false | |
# >> query_leap_year[1993] | |
# => false | |
# doctest: 1900 is a century but not leap year | |
# >> query_leap_year[1900] | |
# => false | |
query_leap_year = ->(year) do | |
year % 400 == 0 || year % 100 != 0 && year % 4 == 0 | |
end | |
# doctest: minutes in a normal year | |
# >> year_in_minutes[2001] | |
# => 525600 | |
# doctest: minutes in a leap year | |
# >> year_in_minutes[2000] | |
# => 527040 | |
year_in_minutes = ->(year) do | |
60 * 24 * (query_leap_year.call(year) ? 366 : 365) | |
end | |
if __FILE__ == $PROGRAM_NAME | |
# doctest: output correct | |
# >> year = 2005 | |
# >> leap_or_not = query_leap_year.call(year) | |
# >> "Year #{year} is a leap year? #{leap_or_not}" | |
# => "Year 2005 is a leap year? false" | |
# >> minutes = year_in_minutes.call(year) | |
# >> "And it has #{minutes} minutes." | |
# => "And it has 525600 minutes." | |
[2005, 2008, 1900, 2000].each do |year| | |
my_minutes_answer = year_in_minutes.call(year) | |
is_leap_year_or_not = query_leap_year.call(year) | |
report = "%i is a leap year? %s\nAnd it has %i minutes" | |
puts format(report, year, is_leap_year_or_not, my_minutes_answer) | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment