Last active
December 26, 2016 09:20
-
-
Save minhajuddin/d17e682525141168ee423b9a5180ed56 to your computer and use it in GitHub Desktop.
Flatten
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Flat do | |
# [ 1 , 2, 3, [ 1, 2]] | |
def flatten(list) do | |
flatten(list, []) | |
end | |
def flatten([h|t], acc_list) when is_list(h) do | |
# this may be expensive! | |
flatten(h ++ t, acc_list) | |
end | |
def flatten([h|t], acc_list) do | |
flatten(t, [h|acc_list]) | |
end | |
def flatten([], acc_list) do | |
Enum.reverse(acc_list) | |
end | |
end | |
ExUnit.start | |
defmodule FlatTest do | |
use ExUnit.Case | |
test "should flatten multiple nested list" do | |
assert Flat.flatten([1 , 2, 3, [ 11, 12, [:a, :b, [33, 44], :bar], 99], :awesome]) == [1, 2, 3, 11, 12, :a, :b, 33, 44, :bar, 99, :awesome] | |
end | |
test "should flatten an already flat list" do | |
assert Flat.flatten([1 , 2, :awesome]) == [1 , 2, :awesome] | |
end | |
test "should flatten nested empty arrays" do | |
assert Flat.flatten([1 , 2, [[], [], []], :awesome]) == [1 , 2, :awesome] | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Flatten | |
def self.flatten(array) | |
out = [] | |
array.each do |el| | |
if el.is_a?(Array) | |
out = out + flatten(el) | |
else | |
out << el | |
end | |
end | |
out | |
end | |
end | |
require 'minitest/autorun' | |
class FlattenTest < Minitest::Test | |
def test_without_nesting | |
assert_equal Flatten.flatten([1, 3, 4]), [1, 3, 4] | |
assert_equal Flatten.flatten([]), [] | |
end | |
def test_simple_nesting | |
assert_equal Flatten.flatten([1, 3, [4]]), [1, 3, 4] | |
assert_equal Flatten.flatten([1, [3], [4]]), [1, 3, 4] | |
end | |
def test_deep_nesting | |
assert_equal Flatten.flatten([1, [3, [5, [4, 20, [44, []]]]], [4]]), [1, 3, 5, 4, 20, 44, 4] | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment