fix(curriculum): rework Project Euler 94 (#42243)

Co-authored-by: Sem Bauke <46919888+Sembauke@users.noreply.github.com>
This commit is contained in:
gikf
2021-05-31 19:34:05 +02:00
committed by GitHub
parent b765237f38
commit 42ff4307ba

View File

@ -8,24 +8,42 @@ dashedName: problem-94-almost-equilateral-triangles
# --description-- # --description--
It is easily proved that no equilateral triangle exists with integral length sides and integral area. However, the <dfn>almost equilateral triangle</dfn> 5-5-6 has an area of 12 square units. It is easily proved that no equilateral triangle exists with integral length sides and integral area. However, the almost equilateral triangle 5-5-6 has an area of 12 square units.
We shall define an <dfn>almost equilateral triangle</dfn> to be a triangle for which two sides are equal and the third differs by no more than one unit. We shall define an <dfn>almost equilateral triangle</dfn> to be a triangle for which two sides are equal and the third differs by no more than one unit.
Find the sum of the perimeters of all <dfn>almost equilateral triangle</dfn> with integral side lengths and area and whose perimeters do not exceed one billion (1,000,000,000). Find the sum of the perimeters of all almost equilateral triangles with integral side lengths and area and whose perimeters do not exceed `limit`.
# --hints-- # --hints--
`almostEquilateralTriangles()` should return a number. `almostEquilateralTriangles(50)` should return a number.
```js ```js
assert(typeof almostEquilateralTriangles() === 'number'); assert(typeof almostEquilateralTriangles(50) === 'number');
``` ```
`almostEquilateralTriangles()` should return 518408346. `almostEquilateralTriangles(50)` should return `66`.
```js ```js
assert.strictEqual(almostEquilateralTriangles(), 518408346); assert.strictEqual(almostEquilateralTriangles(50), 66);
```
`almostEquilateralTriangles(10000)` should return `3688`.
```js
assert.strictEqual(almostEquilateralTriangles(10000), 3688);
```
`almostEquilateralTriangles(10000000)` should return `9973078`.
```js
assert.strictEqual(almostEquilateralTriangles(10000000), 9973078);
```
`almostEquilateralTriangles(1000000000)` should return `518408346`.
```js
assert.strictEqual(almostEquilateralTriangles(1000000000), 518408346);
``` ```
# --seed-- # --seed--
@ -33,16 +51,34 @@ assert.strictEqual(almostEquilateralTriangles(), 518408346);
## --seed-contents-- ## --seed-contents--
```js ```js
function almostEquilateralTriangles() { function almostEquilateralTriangles(limit) {
return true; return true;
} }
almostEquilateralTriangles(); almostEquilateralTriangles(50);
``` ```
# --solutions-- # --solutions--
```js ```js
// solution required function almostEquilateralTriangles(limit) {
// Based on https://blog.dreamshire.com/project-euler-94-solution/
let perimetersSum = 0;
let sidesAB = 1;
let sideC = 1;
let perimeter = 0;
let perimeterOffset = 1;
while (perimeter <= limit) {
[sidesAB, sideC] = [4 * sidesAB - sideC + 2 * perimeterOffset, sidesAB];
perimeterOffset = -perimeterOffset;
perimetersSum += perimeter;
perimeter = 3 * sidesAB - perimeterOffset;
}
return perimetersSum;
}
``` ```