Report abuse


			
require 'test/unit'

class Array
  def sex_partition
    m, f, g, i = 0, size - 1, size - 2, 0
    while i <= f && (g > m && g < f)  do
      if self[i] == 'm'
        m+=1
        i+=1
      elsif self[i] == 'f'
        swap(i, f)
        f-=1
        if f == g
          swap(g, g-1)
          g-=1
        end
      else
        swap(i, g)
        g-=1
      end
    end
    self
  end

  def swap(s, d)
    self[s], self[d] = self[d], self[s]
  end
end

class TestPartitioning < Test::Unit::TestCase
  def test_solution
    pool = %w(m m f g f m f g m m g f)
    assert_equal %w(m m m m m g g g f f f f), pool.sex_partition
  end
  def test_another_solution
    pool = %w(g m f g f g f g f m g f)
    assert_equal %w(m m g g g g g f f f f f), pool.sex_partition
  end
end