From 762775889ea9de08ec58c96e241f5d6beaf90e26 Mon Sep 17 00:00:00 2001 From: gikf <60067306+gikf@users.noreply.github.com> Date: Wed, 17 Feb 2021 20:58:18 +0100 Subject: [PATCH] fix: rework Project Euler - Problem 57 (#40926) * fix: rework challenge to use argument in function * fix: add solution * fix: correct variable name --- .../problem-57-square-root-convergents.md | 54 ++++++++++++++++--- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-57-square-root-convergents.md b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-57-square-root-convergents.md index e57107565f..17103bc6fe 100644 --- a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-57-square-root-convergents.md +++ b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-57-square-root-convergents.md @@ -24,20 +24,32 @@ $1 + \\frac 1 {2 + \\frac 1 {2+\\frac 1 {2+\\frac 1 2}}} = \\frac {41}{29} = 1.4 The next three expansions are $\\frac {99}{70}$, $\\frac {239}{169}$, and $\\frac {577}{408}$, but the eighth expansion, $\\frac {1393}{985}$, is the first example where the number of digits in the numerator exceeds the number of digits in the denominator. -In the first one-thousand expansions, how many fractions contain a numerator with more digits than denominator? +In the first `n` expansions, how many fractions contain a numerator with more digits than denominator? # --hints-- -`squareRootConvergents()` should return a number. +`squareRootConvergents(10)` should return a number. ```js -assert(typeof squareRootConvergents() === 'number'); +assert(typeof squareRootConvergents(10) === 'number'); ``` -`squareRootConvergents()` should return 153. +`squareRootConvergents(10)` should return 1. ```js -assert.strictEqual(squareRootConvergents(), 153); +assert.strictEqual(squareRootConvergents(10), 1); +``` + +`squareRootConvergents(100)` should return 15. + +```js +assert.strictEqual(squareRootConvergents(100), 15); +``` + +`squareRootConvergents(1000)` should return 153. + +```js +assert.strictEqual(squareRootConvergents(1000), 153); ``` # --seed-- @@ -45,16 +57,42 @@ assert.strictEqual(squareRootConvergents(), 153); ## --seed-contents-- ```js -function squareRootConvergents() { +function squareRootConvergents(n) { return true; } -squareRootConvergents(); +squareRootConvergents(1000); ``` # --solutions-- ```js -// solution required +function squareRootConvergents(n) { + function countDigits(number) { + let counter = 0; + while (number > 0) { + counter++; + number = number / 10n; + } + return counter; + } + + // Use BigInt as integer won't handle all cases + let numerator = 3n; + let denominator = 2n; + let moreDigitsInNumerator = 0; + + for (let i = 2; i <= n; i++) { + [numerator, denominator] = [ + numerator + 2n * denominator, + denominator + numerator + ]; + + if (countDigits(numerator) > countDigits(denominator)) { + moreDigitsInNumerator++; + } + } + return moreDigitsInNumerator; +} ```