🎉 Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io 🎉 # PatrickMcSweeny's solution

## to Difference Of Squares in the Ruby Track

Published at Jul 19 2018 · 0 comments
Instructions
Test suite
Solution

Find the difference between the square of the sum and the sum of the squares of the first N natural numbers.

The square of the sum of the first ten natural numbers is (1 + 2 + ... + 10)² = 55² = 3025.

The sum of the squares of the first ten natural numbers is 1² + 2² + ... + 10² = 385.

Hence the difference between the square of the sum of the first ten natural numbers and the sum of the squares of the first ten natural numbers is 3025 - 385 = 2640.

For installation and learning resources, refer to the Ruby resources page.

For running the tests provided, you will need the Minitest gem. Open a terminal window and run the following command to install minitest:

``````gem install minitest
``````

If you would like color output, you can `require 'minitest/pride'` in the test file, or note the alternative instruction, below, for running the test file.

Run the tests from the exercise directory using the following command:

``````ruby difference_of_squares_test.rb
``````

To include color from the command line:

``````ruby -r minitest/pride difference_of_squares_test.rb
``````

## Source

Problem 6 at Project Euler http://projecteuler.net/problem=6

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### difference_of_squares_test.rb

``````require 'minitest/autorun'
require_relative 'difference_of_squares'

# Common test data version: 1.2.0 1b6851d
class DifferenceOfSquaresTest < Minitest::Test
def test_square_of_sum_1
# skip
assert_equal 1, Squares.new(1).square_of_sum
end

def test_square_of_sum_5
skip
assert_equal 225, Squares.new(5).square_of_sum
end

def test_square_of_sum_100
skip
assert_equal 25_502_500, Squares.new(100).square_of_sum
end

def test_sum_of_squares_1
skip
assert_equal 1, Squares.new(1).sum_of_squares
end

def test_sum_of_squares_5
skip
assert_equal 55, Squares.new(5).sum_of_squares
end

def test_sum_of_squares_100
skip
assert_equal 338_350, Squares.new(100).sum_of_squares
end

def test_difference_of_squares_1
skip
assert_equal 0, Squares.new(1).difference
end

def test_difference_of_squares_5
skip
assert_equal 170, Squares.new(5).difference
end

def test_difference_of_squares_100
skip
assert_equal 25_164_150, Squares.new(100).difference
end
end``````
``````class Squares
def initialize(number)
@range = (1..number)
end

def square_of_sum
@range.reduce(:+)**2
end

def sum_of_squares
@range.reduce { |sum, n| sum + n**2 }
end

def difference
square_of_sum - sum_of_squares
end
end``````