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

# flI's solution

## to Difference Of Squares in the Vim script Track

Published at Apr 15 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.

# How to run the tests

If you don't know how to run Vader tests, see: Tests.

For general information about the Vim script track, see: Help.

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

``````"
" Version: 1.2.0
"

Execute (square of sum 1):
let number = 1
let expected = 1
AssertEqual expected, SquareOfSum(number)

Execute (square of sum 5):
let number = 5
let expected = 225
AssertEqual expected, SquareOfSum(number)

Execute (square of sum 100):
let number = 100
let expected = 25502500
AssertEqual expected, SquareOfSum(number)
Execute (sum of squares 1):
let number = 1
let expected = 1
AssertEqual expected, SumOfSquares(number)

Execute (sum of squares 5):
let number = 5
let expected = 55
AssertEqual expected, SumOfSquares(number)

Execute (sum of squares 100):
let number = 100
let expected = 338350
AssertEqual expected, SumOfSquares(number)
Execute (difference of squares 1):
let number = 1
let expected = 0
AssertEqual expected, DifferenceOfSquares(number)

Execute (difference of squares 5):
let number = 5
let expected = 170
AssertEqual expected, DifferenceOfSquares(number)

Execute (difference of squares 100):
let number = 100
let expected = 25164150
AssertEqual expected, DifferenceOfSquares(number)``````
``````"
" Find the difference between the square of the sum and the sum of the squares
" of the first N natural numbers.
"
" Examples:
"
"   :echo SquareOfSum(3)
"   36
"   :echo SumOfSquares(3)
"   14
"   :echo DifferenceOfSquares(3)
"   22
"
function! DifferenceOfSquares(number) abort
let l:s = ( a:number + 1 ) * a:number / 2.0
let l:p = ( a:number / 2.0 ) - ( 1.0 / 6.0 )
let l:p = ( l:p * a:number ) - ( 1.0 / 3.0 )
return float2nr( l:s * l:p )
endfunction

function! SquareOfSum(number) abort
let l:s = ( a:number + 1 ) * a:number / 2
return l:s * l:s
endfunction

function! SumOfSquares(number) abort
return ( 2 * a:number + 1 )*( a:number + 1 )*a:number / 6
endfunction``````