ruby - flatten-array
This commit is contained in:
parent
dbe6b2b1bd
commit
5991d1fab1
41
ruby/flatten-array/README.md
Normal file
41
ruby/flatten-array/README.md
Normal file
@ -0,0 +1,41 @@
|
||||
# Flatten Array
|
||||
|
||||
Take a nested list and return a single flattened list with all values except nil/null.
|
||||
|
||||
The challenge is to write a function that accepts an arbitrarily-deep nested list-like structure and returns a flattened structure without any nil/null values.
|
||||
|
||||
For Example
|
||||
|
||||
input: [1,[2,3,null,4],[null],5]
|
||||
|
||||
output: [1,2,3,4,5]
|
||||
|
||||
* * * *
|
||||
|
||||
For installation and learning resources, refer to the
|
||||
[exercism help page](http://exercism.io/languages/ruby).
|
||||
|
||||
For running the tests provided, you will need the Minitest gem. Open a
|
||||
terminal window and run the following command to install minitest:
|
||||
|
||||
gem install minitest
|
||||
|
||||
If you would like color output, you can `require 'minitest/pride'` in
|
||||
the test file, or note the alternative instruction, below, for running
|
||||
the test file.
|
||||
|
||||
Run the tests from the exercise directory using the following command:
|
||||
|
||||
ruby flatten_array_test.rb
|
||||
|
||||
To include color from the command line:
|
||||
|
||||
ruby -r minitest/pride flatten_array_test.rb
|
||||
|
||||
|
||||
## Source
|
||||
|
||||
Interview Question [https://reference.wolfram.com/language/ref/Flatten.html](https://reference.wolfram.com/language/ref/Flatten.html)
|
||||
|
||||
## Submitting Incomplete Solutions
|
||||
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
16
ruby/flatten-array/flatten_array.rb
Normal file
16
ruby/flatten-array/flatten_array.rb
Normal file
@ -0,0 +1,16 @@
|
||||
class FlattenArray
|
||||
def self.flatten(array)
|
||||
recursive_flatten(array)
|
||||
end
|
||||
|
||||
def self.recursive_flatten(array, result = [])
|
||||
array.each do |a|
|
||||
if a.is_a? Array
|
||||
recursive_flatten(a, result)
|
||||
else
|
||||
result << a unless a.nil?
|
||||
end
|
||||
end
|
||||
result
|
||||
end
|
||||
end
|
41
ruby/flatten-array/flatten_array_test.rb
Normal file
41
ruby/flatten-array/flatten_array_test.rb
Normal file
@ -0,0 +1,41 @@
|
||||
require 'minitest/autorun'
|
||||
require_relative 'flatten_array'
|
||||
|
||||
# Common test data version: 1.2.0 0290376
|
||||
class FlattenArrayTest < Minitest::Test
|
||||
def test_no_nesting
|
||||
# skip
|
||||
flat_array = FlattenArray.flatten([0, 1, 2])
|
||||
assert_equal [0, 1, 2], flat_array
|
||||
end
|
||||
|
||||
def test_flattens_array_with_just_integers_present
|
||||
# skip
|
||||
flat_array = FlattenArray.flatten([1, [2, 3, 4, 5, 6, 7], 8])
|
||||
assert_equal [1, 2, 3, 4, 5, 6, 7, 8], flat_array
|
||||
end
|
||||
|
||||
def test_5_level_nesting
|
||||
# skip
|
||||
flat_array = FlattenArray.flatten([0, 2, [[2, 3], 8, 100, 4, [[[50]]]], -2])
|
||||
assert_equal [0, 2, 2, 3, 8, 100, 4, 50, -2], flat_array
|
||||
end
|
||||
|
||||
def test_6_level_nesting
|
||||
# skip
|
||||
flat_array = FlattenArray.flatten([1, [2, [[3]], [4, [[5]]], 6, 7], 8])
|
||||
assert_equal [1, 2, 3, 4, 5, 6, 7, 8], flat_array
|
||||
end
|
||||
|
||||
def test_6_level_nest_list_with_nil_values
|
||||
# skip
|
||||
flat_array = FlattenArray.flatten([0, 2, [[2, 3], 8, [[100]], nil, [[nil]]], -2])
|
||||
assert_equal [0, 2, 2, 3, 8, 100, -2], flat_array
|
||||
end
|
||||
|
||||
def test_all_values_in_nested_list_are_nil
|
||||
# skip
|
||||
flat_array = FlattenArray.flatten([nil, [[[nil]]], nil, nil, [[nil, nil], nil], nil])
|
||||
assert_equal [], flat_array
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user