class Array
  def pancake_sort!
    num_flips = 0
    (self.size-1).downto(1) do |end_idx|
      max     = self[0..end_idx].max
      max_idx = self[0..end_idx].index(max)
      next if max_idx == end_idx

      if max_idx > 0
        self[0..max_idx] = self[0..max_idx].reverse 
        p [num_flips += 1, self]  if $DEBUG
      end

      self[0..end_idx] = self[0..end_idx].reverse 
      p [num_flips += 1, self]  if $DEBUG
    end
    self
  end
end

p a = (1..9).to_a.shuffle
p a.pancake_sort!