6, I have 6 Eulers

Euler 6! This is getting a bit more difficult to post about the Euler problems because I've actually completed all 10 a few weeks ago now. When I go to post, I find that I'm trying to remember what I did, where I was at, and what my thought process was. So, a word of advice, if you're looking to blog about a bug or something you're working on, do it right after you finish figuring it out.

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  endenddescribe '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 Problem6def self.sum(number_set)  sum = (number_set).map { |i| i*i }.reduce(:+)    #put here the sum of squares of the numbers  return sumenddef self.square(number_set)  square = (number_set).reduce(:+)**2    # put the square of the sum of the numbers  return squareenddef self.difference(number_set)  difference = (number_set).reduce(:+)**2 - (number_set).map { |i| i*i }.reduce(:+)  return differenceendputs Problem6.difference(1..100)end

If you wanted to keep each of the three parts, this is what the code would look like:
module Problem6def self.sum(number_set)  sum = (number_set).map { |i| i*i }.reduce(:+)    #put here the sum of squares of the numbers  return sumenddef self.square(number_set)  square = (number_set).reduce(:+)**2    # put the square of the sum of the numbers  return squareenddef self.difference(number_set)  difference = square(number_set)-sum(number_set)  return differenceendputs 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.