HackerRank Ruby Enumerables: ‘any’, ‘all’, ‘none’, and ‘find’ Solution

Hello coders, In this post, you will learn how to solve HackerRank Ruby Enumerables: ‘any’, ‘all’, ‘none’, and ‘find’ Solution. This problem is a part of the Ruby Tutorial series. One more thing to add, don’t straight away look for the solutions, first try to solve the problems by yourself. If you find any difficulty after trying several times, then look for the solutions.

HackerRank Ruby Enumerables: ‘any’, ‘all’, ‘none’, and ‘find’ Solution
HackerRank Ruby Enumerables: ‘any’, ‘all’, ‘none’, and ‘find’ Solution

HackerRank Ruby Enumerables: ‘any’, ‘all’, ‘none’, and ‘find’

Let’s get started with HackerRank Ruby Enumerables: ‘any’, ‘all’, ‘none’, and ‘find’

Problem Statement

Ruby offers various enumerables on collections that check for validity of the objects within it.

Consider the following example:

> arr = [1, 2, 3, 4, 5, 6]
=> [1, 2, 3, 4, 5, 6]
> h = {"a" => 1, "b" => 2, "c" => 3}
=> {"a" => 1, "b" => 2, "c" => 3}

The any? method returns true if the block ever returns a value other than false or nil for any element passed to it:

> arr.any? {|a| a % 2 == 0} # checks if any number in the array is even
=> True
> h.any? {|key, value| value.is_a? String} # checks if any value of the Hash object is of the type String
=> False

The all? method returns true if the block never returns false or nil for any element passed to it:

> arr.all? {|a| a.is_a? Integer} # checks if all elements of the array are of the type Integer
=> True
> h.all? {|key, value| key.is_a? String} # checks if all keys of the Hash object are of the type String
=> True

The none? method returns true if the block never returns true for any element passed to it:

> arr.none? {|a| a.nil?} # Checks if none of the elements in the array are of nil type
=> True
> h.none? {|key, value| value < 3} # checks if all values of the Hash object are less than 3
=> False

The find method returns the first element for which block is not false:

> arr.find {|a| a > 5} # returns the first element greater than 5 and `nil` if none satisfies the condition
=> 6
> h.find {|key, value| key == "b"} # returns an Array of the first match [key, value] that satisfies the condition and nil otherwise
=> ["b", 2]

Task
Based on what you’ve learned above, complete the functions declared in your editor below.

HackerRank Ruby Enumerables: ‘any’, ‘all’, ‘none’, and ‘find’ Solution

def func_any(hash)
  # Check and return true if any key object within the hash is of the type Integer
  # If not found, return false.
  hash.any? {|key,value| key.is_a? Integer}
end
def func_all(hash)
  # Check and return true if all the values within the hash are Integers and are < 10
  # If not all values satisfy this, return false.
  hash.all? {|key, value| (value.is_a? Integer and value < 10)}
end
def func_none(hash)
  # Check and return true if none of the values within the hash are nil
  # If any value contains nil, return false.
  hash.none? {|key, value| value.nil? }
end
def func_find(hash)
  # Check and return the first object that satisfies either of the following properties:
  #   1. There is a [key, value] pair where the key and value are both Integers and the value is < 20 
  #   2. There is a [key, value] pair where the key and value are both Strings and the value starts with `a`.
  hash.find {|key, value| ((key.is_a? Integer and value.is_a? Integer and value < 20) or (key.is_a? String and value.is_a? String and value[0] == 'a'))}
end

Note: This problem (HackerRank Ruby Enumerables: ‘any’, ‘all’, ‘none’, and ‘find’) is generated by HackerRank but the solution is provided by Chase2Learn. This tutorial is only for Educational and Learning purpose.

Sharing Is Caring