Description:
Sum all the numbers of the array except the highest and the lowest element.
Example: { 6, 2, 1, 8, 10 } => 16
If array is empty or null, or if only 1 Element exists, return 0.
Test Cases:
Test.describe("Basic tests") do
Test.it("nil or Empty") do
Test.assert_equals(sum_array(nil), 0)
Test.assert_equals(sum_array([]), 0)
end
Test.it("Only one Element") do
Test.assert_equals(sum_array([3]), 0)
Test.assert_equals(sum_array([-3]), 0)
end
Test.it("Only two Element") do
Test.assert_equals(sum_array([ 3, 5]), 0)
Test.assert_equals(sum_array([-3, -5]), 0)
end
Test.it("Real Tests") do
Test.assert_equals(sum_array([6, 2, 1, 8, 10]), 16)
Test.assert_equals(sum_array([6, 0, 1, 10, 10]), 17)
Test.assert_equals(sum_array([-6, -20, -1, -10, -12]), -28)
Test.assert_equals(sum_array([-6, 20, -1, 10, -12]), 3)
end
end
Solutions:
def sum_array(a)
if a == nil || a == [] || a.length <=1 then return 0 end
a = a.sort()
a.inject(0){|t,x| t + x } - a[0] - a[-1]
end
OR
def sum_array(arr) (arr.class!=Array or arr.length<3) ? 0 : arr.reduce([0,9999999999999,-9999999999999]){|a,b| [a[0]+b,a[1]>b ? b : a[1],a[2]<b ? b : a[2]]}.reduce{|a,b| a-b} end
0 Comment(s)