Last active
August 29, 2015 14:02
-
-
Save keithrbennett/2ec21176864e7239c97a to your computer and use it in GitHub Desktop.
Leap Year Calculation with Lambdas
This file contains 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
#!/usr/bin/env rspec | |
def leap_year?(year) | |
is_mult_of = ->(year, multiplier) { year % multiplier == 0 } | |
return false unless is_mult_of.(year, 4) | |
return true unless is_mult_of.(year, 100) | |
return is_mult_of.(year, 400) | |
end | |
# This way is more verbose but might be clearer. | |
def leap_year_2?(year) | |
fn_multiple_of = ->(multiplier) { ->(a_year) { a_year % multiplier == 0 } } | |
mult_of_4 = fn_multiple_of.(4) | |
mult_of_100 = fn_multiple_of.(100) | |
mult_of_400 = fn_multiple_of.(400) | |
return false unless mult_of_4.(year) | |
return true unless mult_of_100.(year) | |
return mult_of_400.(year) | |
# mult_of_4.(year) && ((!mult_of_100.(year)) || (! mult_of_400.(year))) | |
end | |
describe 'leap_year?' do | |
test_a_year = ->(year, expected_result) do | |
specify "Year #{year} should return #{expected_result}" do | |
leap_year?(year).should == expected_result | |
end | |
end | |
test_a_year.(2000, true) | |
test_a_year.(2001, false) | |
test_a_year.(2004, true) | |
test_a_year.(2100, false) | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment