diff --git a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-94-almost-equilateral-triangles.md b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-94-almost-equilateral-triangles.md
index fbd3f04a8b..ef0c095e03 100644
--- a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-94-almost-equilateral-triangles.md
+++ b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-94-almost-equilateral-triangles.md
@@ -8,24 +8,42 @@ dashedName: problem-94-almost-equilateral-triangles
# --description--
-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.
+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 almost equilateral triangle 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 almost equilateral triangle 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--
-`almostEquilateralTriangles()` should return a number.
+`almostEquilateralTriangles(50)` should return a number.
```js
-assert(typeof almostEquilateralTriangles() === 'number');
+assert(typeof almostEquilateralTriangles(50) === 'number');
```
-`almostEquilateralTriangles()` should return 518408346.
+`almostEquilateralTriangles(50)` should return `66`.
```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--
@@ -33,16 +51,34 @@ assert.strictEqual(almostEquilateralTriangles(), 518408346);
## --seed-contents--
```js
-function almostEquilateralTriangles() {
+function almostEquilateralTriangles(limit) {
return true;
}
-almostEquilateralTriangles();
+almostEquilateralTriangles(50);
```
# --solutions--
```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;
+}
```