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

# leonistor's solution

## to Difference Of Squares in the Nim Track

Published at Nov 27 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.

## Running the tests

To compile and run the tests, just run the following in your exercise directory:

``````\$ nim c -r test_difference_of_squares.nim
``````

## Submitting Exercises

Note that, when trying to submit an exercise, make sure the solution is in the `\$EXERCISM_WORKSPACE/nim/difference-of-squares` directory.

You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Exercises Directory`.

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

### test_difference_of_squares.nim

``````import unittest
import difference_of_squares

suite "Difference of Squares":
test "square of sum 1":
check squareOfSum(1) == 1

test "square of sum 5":
check squareOfSum(5) == 225

test "square of sum 100":
check squareOfSum(100) == 25_502_500

test "sum of squares 1":
check sumOfSquares(1) == 1

test "sum of squares 5":
check sumOfSquares(5) == 55

test "sum of squares 100":
check sumOfSquares(100) == 338_350

test "difference of squares 1":
check difference(1) == 0

test "difference of squares 5":
check difference(5) == 170

test "difference of squares 100":
check difference(100) == 25_164_150``````
``````import sequtils, math

proc square(n: int): int =
n * n

proc squareOfSum*(n: int): int =
toSeq(1..n).sum().square()

proc sumOfSquares*(n: int): int =
toSeq(1..n).mapIt(square(it)).sum()

proc difference*(n: int): int =
squareOfSum(n) - sumOfSquares(n)``````