The array class also allows to select and return a subset of an array based on some criteria defined in a block (a block is a group of code within {} that accepts a variable and returns a value).
- Selecting elements that satisfy a given criteria
- Rejecting elements that satisfy a given criteria
 > arr = [3, 4, 2, 1, 2, 3, 4, 5, 6]
 > arr.select {|a| a > 2}
 => [3, 4, 3, 4, 5, 6]
 > arr.reject {|a| a > 2}
 => [2, 1, 2]
 > arr
 => [3, 4, 2, 1, 2, 3, 4, 5, 6]
 > arr.drop_while {|a| a > 1} # removes elements till the block returns false for the first time
 => [1, 2, 3, 4, 5, 6]
 
As you can see, the original array remains unchanged. This is called Non-Destructive Selection. 
For destructive behavior (change to the original array), Ruby provides the following methods:
 > arr = [3, 4, 2, 1, 2, 3, 4, 5, 6]  
 > arr.delete_if {|a| a < 2}
  => [3, 4, 2, 2, 3, 4, 5, 6]  
 > arr.keep_if {|a| a < 4}  
 => [3, 2, 2, 3]
Note
- An element in a block is selected, rejected, deleted, or kept based on the TrueorFalsevalue generated by that block on that element.
- For a destructive behavior for selectandrejector any method that one wants to enforce a change in the original array, a!can be used at the end of the method i.e.,select!andreject!
In this challenge, you have to complete the functions below using syntax as explained above.