You've successfully subscribed to The Poor Coder | Hackerrank Solutions
Great! Next, complete checkout for full access to The Poor Coder | Hackerrank Solutions
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Hackerrank Ruby Enumerables: 'any', 'all', 'none', and 'find' Solution

Hackerrank Ruby Enumerables: 'any', 'all', 'none', and 'find' Solution

Beeze Aal
Beeze Aal

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.

Solution in ruby

Approach 1.

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? Fixnum}
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? Fixnum 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)
   # hash.find?{|key,value|key.is_a? Fixnum and value.is_a? Fixnum and value < 20}
    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.start_with? 'a') }
end

Approach 2.

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 < 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) || (key.is_a? String and value.is_a? String and value.start_with? 'a')}
end

Approach 3.

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 {| k , v | ((k.is_a? Integer and v.is_a? Integer) and v < 20) or ((k.is_a? String and v.is_a? String) and v.match(/^a/)) }
end