kareemgrant
5/23/2015 - 5:31 PM

find_duplicate.rb

# Given an array of n numbers with exactly one duplicate, write a program that finds the duplicate number in an efficient manner

require 'minitest/autorun'


def find_duplicate(numbers_array)

  # using an array as a way to keep track of evaluted numbers
  checked_numbers = []

  numbers_array.each do |number|
    return number if checked_numbers.include?(number)
    checked_numbers << number
  end

  'no duplicate found'
end

class FindDuplicatesTest < MiniTest::Unit::TestCase

  def test_returns_message_with_no_duplicates
    assert_equal 'no duplicate found', find_duplicate([1, 2, 3].shuffle)
  end

  def test_returns_duplicate_with_small_array
    assert_equal 3, find_duplicate([1, 2, 3, 3].shuffle)
  end

  def test_returns_duplicate_with_larger_array
    assert_equal 9999, find_duplicate((1..9999).to_a.shuffle << 9999)
  end
end