Skip to content

Instantly share code, notes, and snippets.

@shved
Last active July 18, 2016 10:47
Show Gist options
  • Save shved/77a8f3cd04761ee16a3ad3ad2417c374 to your computer and use it in GitHub Desktop.
Save shved/77a8f3cd04761ee16a3ad3ad2417c374 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
class Array
def my_flatten
return self if empty?
return self unless any? { |el| el.is_a? Array }
last_elem = pop
if last_elem.is_a? Array
my_flatten + last_elem.my_flatten
else
my_flatten << last_elem
end
end
end
# specs
class MyArray < Array
def yeah!
self << 'Because I can!'
end
end
my_a = MyArray.new([1, 2, [3, 4, [[5, 6], 7, [8], 9], 10], 11])
samples = [
[],
[1],
[1, 2, 3],
[1, 2, [3]],
[[[[[1]]]]],
[1, 2, [3, 4, [[5, 6], 7, [8], 9], 10], 11],
my_a
]
samples.each do |sample|
puts "original array: #{sample}"
puts "flatten array: #{sample.dup.my_flatten}"
if sample.dup.my_flatten == sample.dup.flatten
puts 'green'
else
puts 'red'
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment