Вот еще один вариант:
a.group_by(&:itself).transform_values{ |v| v.size / 2 }.values.sum
#=> 9
Как это работает.
Первая группа элементов по значению:
a.group_by(&:itself) #=> {4=>[4, 4, 4, 4, 4], 5=>[5, 5, 5, 5, 5, 5], 6=>[6, 6, 6, 6, 6], 1=>[1, 1], 3=>[3, 3]}
Затем преобразование ключей в число пар:
a.group_by(&:itself).transform_values{ |v| v.size / 2 } #=> {4=>2, 5=>3, 6=>2, 1=>1, 3=>1}
Итак, получите значения хеша:
a.group_by(&:itself).transform_values{ |v| v.size / 2 }.values #=> [2, 3, 2, 1, 1]
Наконец, суммируйте значения, которые являются первой строкой кода, размещенного выше.