def min_elements_by_with_block(arr, &block)
      min_elements, arr = first_elements_and_residue(arr, &block)
      return [] if arr.empty? && min_elements.nil?
      arr.each do |e|
        current_min_elements_value = yield(min_elements.first)