ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# brunocmoura's solution

## to Difference Of Squares in the TypeScript Track

Published at May 06 2020 · 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.

You are not expected to discover an efficient solution to this yourself from first principles; research is allowed, indeed, encouraged. Finding the best algorithm for the problem is a key skill in software engineering.

## Setup

Go through the setup instructions for TypeScript to install the necessary dependencies:

https://exercism.io/tracks/typescript/installation

## Requirements

Install assignment dependencies:

``````\$ yarn install
``````

## Making the test suite pass

Execute the tests with:

``````\$ yarn test
``````

In the test suites all tests but the first have been skipped.

Once you get a test passing, you can enable the next one by changing `xit` to `it`.

## 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.ts

``````import Squares from './difference-of-squares'

describe('Squares', () => {

describe('up to 5', () => {
const squares = new Squares(5)

it('gets the square of sum', () => {
expect(squares.squareOfSum).toBe(225)
})

xit('gets the sum of squares', () => {
expect(squares.sumOfSquares).toBe(55)
})

xit('gets the difference', () => {
expect(squares.difference).toBe(170)
})

})

describe('up to 10', () => {
const squares = new Squares(10)

xit('gets the square of sum', () => {
expect(squares.squareOfSum).toBe(3025)
})

xit('gets the sum of squares', () => {
expect(squares.sumOfSquares).toBe(385)
})

xit('gets the difference', () => {
expect(squares.difference).toBe(2640)
})

})

describe('up to 100', () => {
const squares = new Squares(100)

xit('gets the square of sum', () => {
expect(squares.squareOfSum).toBe(25502500)
})

xit('gets the sum of squares', () => {
expect(squares.sumOfSquares).toBe(338350)
})

xit('gets the difference', () => {
expect(squares.difference).toBe(25164150)
})

})

})``````
``````export default class Squares{
private _number = 0;
private _squareOfSumResult = 0;
private _sumOfSquaresResult = 0;

constructor(n: number){
this._number = n;
}

get squareOfSum(): number{

const numbers = Array.from<number, number>( {length: this._number}, (v, k) => {
(v); //just for passing by typescript's compiler :)
return k +1;
});

const sum: number = numbers.reduce( (accumulator, currentValue) => accumulator + currentValue );
this._squareOfSumResult = Math.pow(sum, 2)
return this._squareOfSumResult;
}

get sumOfSquares(): number{

const numbers = Array.from<number, number>( {length: this._number}, (v, k) => {
(v); // just for passing by typescript's compiler :)
return Math.pow(k + 1, 2);
});

this._sumOfSquaresResult = numbers.reduce( (accumulator, currentValue) => accumulator + currentValue );
return this._sumOfSquaresResult;
}

get difference(): number {
return this._squareOfSumResult - this._sumOfSquaresResult;
}
}``````