Now, onto the problem!

The sum of the squares of the first ten natural numbers is,

12 + 22 + ... + 102 = 385

The square of the sum of the first ten natural numbers is,

(1 + 2 + ... + 10)2 = 552 = 3025

Hence the difference between the sum of the squares of the first ten

natural numbers and the square of the sum is 3025 − 385 = 2640.

Find the difference between the sum of the squares of the first one

hundred natural numbers and the square of the sum.

This one was a good one to roadmap out before I got started. Once I broke it down into a few pieces, it was also not super complicated to solve. So I know I had to find the sum of the squares. And then, the square of the sums. And finally, the difference between the two. Breaking it up into the three pieces also lent itself nicely to writing tests because I wrote tests for each of those three pieces and then a test set for the numbers up to 10 and a test set for the numbers up to 100. Here are the tests:

require 'problem6/problem6'

describe 'up to 10' do

it "finds the sum of the square of the first ten numbers" do

expect(Problem6.sum(1..10)).to eq 385

end

it "finds the square of the sum of the first ten numbers" do

expect(Problem6.square(1..10)).to eq 3025

end

it "finds the difference between the sum of the square and the square of the sums" do

expect(Problem6.difference(1..10)).to eq 2640

end

end

describe 'up to 100' do

it "finds the sum of the square of the first one hundred numbers" do

expect(Problem6.sum(1..100)).to eq 338350

end

it "finds the square of the sum of the first one hundred numbers" do

expect(Problem6.square(1..100)).to eq 25502500

end

it "finds the difference between the sum of the square and the square of the sums" do

expect(Problem6.difference(1..100)).to eq 25164150

end

end

And here's the code. You'll see each of the three pieces and how they work together. And you actually don't even need the three pieces. (Looking at it again now as I post, I'm seeing that the question only asks for the different so you don't even need to define the sum and the square separately.) For me, when I originally did this, it was easiest for me to define each to visualize it better but now I see that was unnecessary and the final piece is really the only thing I need.

module Problem6

def self.sum(number_set)

sum = (number_set).map { |i| i*i }.reduce(:+)

#put here the sum of squares of the numbers

return sum

end

def self.square(number_set)

square = (number_set).reduce(:+)**2

# put the square of the sum of the numbers

return square

end

def self.difference(number_set)

difference = (number_set).reduce(:+)**2 - (number_set).map { |i| i*i }.reduce(:+)

return difference

end

puts Problem6.difference(1..100)

end

If you wanted to keep each of the three parts, this is what the code would look like:

module Problem6

def self.sum(number_set)

sum = (number_set).map { |i| i*i }.reduce(:+)

#put here the sum of squares of the numbers

return sum

end

def self.square(number_set)

square = (number_set).reduce(:+)**2

# put the square of the sum of the numbers

return square

end

def self.difference(number_set)

difference = square(number_set)-sum(number_set)

return difference

end

puts Problem6.difference(1..100)

end

The primary difference is that, instead of taking the information for the difference and repeated all that code, you are taking the result of the sum method and the result of the square method to find the difference. comments powered by Disqus