Last active
August 29, 2015 14:26
-
-
Save JoshCheek/cbe697e7801469fffdf3 to your computer and use it in GitHub Desktop.
Sorted Merge (https://github.com/turingschool/challenges/blob/d7f7d3e726ce95667ed3f1e1996de2895efadc7c/sorted_merging.markdown)
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
# https://github.com/turingschool/challenges/blob/d7f7d3e726ce95667ed3f1e1996de2895efadc7c/sorted_merging.markdown | |
# I accidentally closed the window I wrote the solution in, | |
# so I couldn't find it, but I rewrote it. I shortened the names, | |
# so that I could get some of the ideas downt o one line. | |
# Also, thought of a way cooler way to implement our `smallest` method :) | |
def smallest(one, two) | |
[one, two].min_by(&:first) | |
end | |
def merge(one, two) | |
sorted = [] | |
sorted << smallest(one, two).shift while one.any? && two.any? | |
sorted << one.shift while one.any? | |
sorted << two.shift while two.any? | |
sorted | |
end | |
merge([], []) # => [] | |
merge([], [1]) # => [1] | |
merge([1], []) # => [1] | |
merge([1,2], []) # => [1, 2] | |
merge([], [1,2]) # => [1, 2] | |
merge([1], [2]) # => [1, 2] | |
merge([2], [1]) # => [1, 2] | |
merge([1,3], [2]) # => [1, 2, 3] | |
merge([2], [1,3]) # => [1, 2, 3] | |
merge([1,2,3], [4]) # => [1, 2, 3, 4] | |
merge([4], [1,2,3]) # => [1, 2, 3, 4] |
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
# Someone had asked about solving it with recursion, | |
# so here is a solution using recursion :) | |
def smallest(one, two) | |
[one, two].min_by(&:first) | |
end | |
def recursive_merge(one, two) | |
return two if one.empty? | |
return one if two.empty? | |
[smallest(one, two).shift, *recursive_merge(one, two)] | |
end | |
recursive_merge([], []) # => [] | |
recursive_merge([], [1]) # => [1] | |
recursive_merge([1], []) # => [1] | |
recursive_merge([1,2], []) # => [1, 2] | |
recursive_merge([], [1,2]) # => [1, 2] | |
recursive_merge([1], [2]) # => [1, 2] | |
recursive_merge([2], [1]) # => [1, 2] | |
recursive_merge([1,3], [2]) # => [1, 2, 3] | |
recursive_merge([2], [1,3]) # => [1, 2, 3] | |
recursive_merge([1,2,3], [4]) # => [1, 2, 3, 4] | |
recursive_merge([4], [1,2,3]) # => [1, 2, 3, 4] |
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
def recursive_merge2(*arrays) | |
arrays.reject! &:empty? | |
arrays.empty? ? [] : [arrays.min_by(&:first).shift, *recursive_merge2(*arrays)] | |
end | |
recursive_merge2([], []) # => [] | |
recursive_merge2([], [1]) # => [1] | |
recursive_merge2([1], []) # => [1] | |
recursive_merge2([1,2], []) # => [1, 2] | |
recursive_merge2([], [1,2]) # => [1, 2] | |
recursive_merge2([1], [2]) # => [1, 2] | |
recursive_merge2([2], [1]) # => [1, 2] | |
recursive_merge2([1,3], [2]) # => [1, 2, 3] | |
recursive_merge2([2], [1,3]) # => [1, 2, 3] | |
recursive_merge2([1,2,3], [4]) # => [1, 2, 3, 4] | |
recursive_merge2([4], [1,2,3]) # => [1, 2, 3, 4] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment