Achatar recursivamente uma matriz

Perguntaram-me isso recentemente durante uma entrevista por telefone e, em meu nervosismo, tive dificuldade em pensar em algo elegante.

Depois, eu rapidamente descobri (claro, cérebro estúpido):

# Goal: recursively flatten array
# flatten([[1, [], [2, 3]], [[[[4]]]], 5]) # => [1, 2, 3, 4, 5]

def flatten(array, flattened = Array.new)
array
.each_with_index do |elem, i|
if elem.is_a?(Array)
flatten
(elem, flattened)
else
flattened
<< elem
end
end
flattened

end

puts flatten
([[1, [], [2, 3]], [[[[4]]]], 5])
# => [1, 2, 3, 4, 5]