Untitled

 avatar
unknown
ruby
a year ago
942 B
4
Indexable
def lilysHomework(arr)
    sorted_arr = arr.sort
    reversed_sorted_arr = sorted_arr.reverse
    
    # original arr = [2, 5, 3, 1]
    # sorted_arr = [1, 2, 3, 5]
    # reversed_sorted_arr = [5, 3, 2, 1]
  
    # Both ASC and DESC sorting are fine
    default_mapping = {}
    reverse_mapping = {}
  
    # Fill both mappings
    arr.each_with_index do |value, i|
      default_mapping[value] = sorted_arr[i]
      reverse_mapping[value] = reversed_sorted_arr[i]
    end
    
    # default_mapping = {2=>1, 5=>2, 3=>3, 1=>5}
    # reverse_mapping = {2=>5, 5=>3, 3=>2, 1=>1}
  
    # Choose the way with min swaps count
    [swaps_count(default_mapping), swaps_count(reverse_mapping)].min
end
  
def swaps_count(mapping)
    swaps = 0
    mapping.each do |key, value|
      while key != value
        swaps += 1
        mapping[key] = mapping[value]
        mapping[value] = value
        value = mapping[key]
      end
    end
    swaps
end
Editor is loading...
Leave a Comment