How to find the second biggest number in a set of random numbers in Ruby

1 Answer

0 votes
# Finds the distinct second-biggest number in an array of numbers.
# 
# @param numbers [Array<Numeric>] An array of integers or floats
# @return [Numeric] The second-biggest unique number
# @raise [ArgumentError] If the array has fewer than 2 unique elements
def find_second_biggest(numbers)
  # Guard clause: ensure the input is an array and has at least 2 elements
  raise ArgumentError, "Input must be an array with at least 2 elements." unless numbers.is_a?(Array) && numbers.length >= 2

  # Remove duplicates to ensure we find a strictly smaller "second biggest" value, 
  # then sort in ascending order.
  unique_sorted = numbers.uniq.sort

  # Check if we have at least 2 unique values (e.g., [5, 5, 5] has only 1 unique value)
  if unique_sorted.length < 2
    raise ArgumentError, "Collection must contain at least two unique numbers."
  end

  # The second biggest number is the second-to-last element in the sorted unique array
  unique_sorted[-2]
end

# --- Example Usage ---
begin
  # Generate a set of random numbers (including duplicates)
  random_numbers = [42, 12, 89, 42, 99, 55, 88, 7, 80]

  puts "Original numbers: #{random_numbers.inspect}"

  second_max = find_second_biggest(random_numbers)
  
  puts "The second biggest unique number is: #{second_max}"

rescue ArgumentError => e
  puts "Error: #{e.message}"
end


# run:
#
# Original numbers: [42, 12, 89, 42, 99, 55, 88, 7, 80]
# The second biggest unique number is: 89
#

 



answered Oct 29 by avibootz

Related questions

...