Вот один из них, использующий inject
(для пустого массива не работает):
words.inject(['']){|a,w|
case w.length <=> a.last.length
when -1
a
when 0
a << w
when 1
[w]
end
}
, который можно сократить до
words.inject(['']){|a,w|
[a + [w], [w], a][w.length <=> a.last.length]
}
для тех, кто любит гольф.