Created
March 10, 2019 22:40
-
-
Save NoMan2000/c8c1e9d0140f27d99681a81893f2978d to your computer and use it in GitHub Desktop.
Ruby code for code kata, solving missing numbers
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
require "test/unit" | |
NOT_A_NUMBER = 1 | |
ALL_GOOD = 0 | |
def update_previous_value_if_one_ahead(i, prev) | |
if prev == nil | |
prev = i.to_i | |
else | |
check_value = prev.to_i + 1 | |
if check_value == i | |
prev = i.to_i | |
end | |
end | |
prev.to_i | |
end | |
def find_missing_number(sequence) | |
arr = sequence.split(' ') | |
unless arr.length | |
return ALL_GOOD | |
end | |
prev = nil | |
arr.each do |i| | |
# Check if not a number | |
if i =~ /\D/ | |
return NOT_A_NUMBER | |
end | |
i = i.to_i | |
# Wouldn't normally recommend this approach. | |
if prev == nil and i == 2 | |
return 1 | |
end | |
prev = update_previous_value_if_one_ahead(i, prev) | |
if i != prev | |
return prev + 1 | |
end | |
end | |
ALL_GOOD | |
end | |
class BLUR_TEST < Test::Unit::TestCase | |
def test_will_return_one_if_not_a_number | |
assert_equal(NOT_A_NUMBER, find_missing_number('a')) | |
end | |
def test_will_return_missing_number | |
assert_equal( | |
4, | |
find_missing_number("1 2 3 5"), | |
"It must work for missing middle terms") | |
end | |
def test_will_return_missing_number_two | |
assert_equal( | |
2, | |
find_missing_number("1 3") | |
) | |
end | |
def test_will_return_0_for_empty_set | |
assert_equal( | |
0, | |
find_missing_number("") | |
) | |
end | |
def test_will_return_missing_number_again | |
assert_equal( | |
1, | |
find_missing_number("2 3 4 5") | |
) | |
end | |
def test_will_return_1_on_invalid_sequence | |
assert_equal( | |
1, | |
find_missing_number("2 1 4 3 a") | |
) | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment