DAY 9
1

# 09 - Sums of Parts

Don't say so much, just coding...

## Instruction

Let us consider this example (array written in general format):

`ls = [0, 1, 3, 6, 10]`

Its following parts:

``````  ls = [0, 1, 3, 6, 10]
ls = [1, 3, 6, 10]
ls = [3, 6, 10]
ls = [6, 10]
ls = [10]
ls = []
``````

The corresponding sums are (put together in a list): `[20, 20, 19, 16, 10, 0]`

The function parts_sums (or its variants in other languages) will take as parameter a list ls and return a list of the sums of its parts as defined above.

Other Examples:

``````  ls = [1, 2, 3, 4, 5, 6]
parts_sums(ls) -> [21, 20, 18, 15, 11, 6, 0]

ls = [744125, 935, 407, 454, 430, 90, 144, 6710213, 889, 810, 2579358]
parts_sums(ls) -> [10037855, 9293730, 9292795, 9292388, 9291934, 9291504, 9291414, 9291270, 2581057, 2580168, 2579358, 0]
``````

### Ruby

#### Init

``````  def parts_sums(ls)
#...
end
``````

#### Sample Testing

``````  describe("parts_sums") do
def dotest(ls, expect)
actual = parts_sums(ls)
Test.assert_equals(actual, expect, "")
end

it("Basic tests") do
dotest([], [0])
dotest([0, 1, 3, 6, 10], [20, 20, 19, 16, 10, 0])
dotest([1, 2, 3, 4, 5, 6], [21, 20, 18, 15, 11, 6, 0])
dotest([744125, 935, 407, 454, 430, 90, 144, 6710213, 889, 810, 2579358],
[10037855, 9293730, 9292795, 9292388, 9291934, 9291504, 9291414, 9291270, 2581057, 2580168, 2579358, 0])
end
end
``````

### Javascript

#### Init

``````  function partsSums(ls) {
}
``````

#### Sample Testing

``````  const chai = require("chai");
const assert = chai.assert;
chai.config.truncateThreshold = 0;

describe("partsSums",function() {

function dotest(ls, expect) {
let actual = partsSums(ls);
assert.deepEqual(actual, expect);
}

it("Basic tests",function() {
dotest([], [0]);
dotest([0, 1, 3, 6, 10], [20, 20, 19, 16, 10, 0]);
dotest([1, 2, 3, 4, 5, 6], [21, 20, 18, 15, 11, 6, 0]);
dotest([744125, 935, 407, 454, 430, 90, 144, 6710213, 889, 810, 2579358],
[10037855, 9293730, 9292795, 9292388, 9291934, 9291504, 9291414, 9291270, 2581057, 2580168, 2579358, 0]);
})})
``````

• Ruby
• JavaScript

# Solution

### Ruby

``````  # Solution 1
def parts_sums(ls)
sum = ls.sum
result = [sum]
(0...ls.size).each { |index|
result << result.last - ls[index]
}
result
end

# Solution 2
def parts_sums(ls)
sum = ls.sum
[sum] + ls.map{ |el| sum -= el }
end
``````

### Javascript

``````  // Solution 1
function partsSums(ls) {
var sum = ls.reduce((a, b) => a + b, 0);
var result = [sum];

for(i = 0; i < ls.length; i++){
result.push((result[result.length-1]) - ls[i]);
};
return result
}
``````