From 7e921fb9d685b7b30cab018539c7358b4a1a6a93 Mon Sep 17 00:00:00 2001 From: gikf <60067306+gikf@users.noreply.github.com> Date: Sun, 13 Jun 2021 13:32:54 +0200 Subject: [PATCH] fix(curriculum): rework Project Euler 62 (#42384) * fix: reworck challenge to use argument in function * fix: add solution * fix: use MathJax to improve math notation --- .../problem-62-cubic-permutations.md | 69 ++++++++++++++++--- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-62-cubic-permutations.md b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-62-cubic-permutations.md index fb98324efe..82294e0708 100644 --- a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-62-cubic-permutations.md +++ b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-62-cubic-permutations.md @@ -8,22 +8,40 @@ dashedName: problem-62-cubic-permutations # --description-- -The cube, 41063625 (3453), can be permuted to produce two other cubes: 56623104 (3843) and 66430125 (4053). In fact, 41063625 is the smallest cube which has exactly three permutations of its digits which are also cube. +The cube, 41063625 ($345^3$), can be permuted to produce two other cubes: 56623104 ($384^3$) and 66430125 ($405^3$). In fact, 41063625 is the smallest cube which has exactly three permutations of its digits which are also cube. -Find the smallest cube for which exactly five permutations of its digits are cube. +Find the smallest cube for which exactly `n` permutations of its digits are cube. # --hints-- -`cubicPermutations()` should return a number. +`cubicPermutations(2)` should return a number. ```js -assert(typeof cubicPermutations() === 'number'); +assert(typeof cubicPermutations(2) === 'number'); ``` -`cubicPermutations()` should return 127035954683. +`cubicPermutations(2)` should return `125`. ```js -assert.strictEqual(cubicPermutations(), 127035954683); +assert.strictEqual(cubicPermutations(2), 125); +``` + +`cubicPermutations(3)` should return `41063625`. + +```js +assert.strictEqual(cubicPermutations(3), 41063625); +``` + +`cubicPermutations(4)` should return `1006012008`. + +```js +assert.strictEqual(cubicPermutations(4), 1006012008); +``` + +`cubicPermutations(5)` should return `127035954683`. + +```js +assert.strictEqual(cubicPermutations(5), 127035954683); ``` # --seed-- @@ -31,16 +49,49 @@ assert.strictEqual(cubicPermutations(), 127035954683); ## --seed-contents-- ```js -function cubicPermutations() { +function cubicPermutations(n) { return true; } -cubicPermutations(); +cubicPermutations(2); ``` # --solutions-- ```js -// solution required +function cubicPermutations(n) { + function getDigits(num) { + const digits = []; + while (num > 0) { + digits.push(num % 10); + num = Math.floor(num / 10); + } + return digits; + } + + function getCube(num) { + return num ** 3; + } + + const digitsToCubeCounts = {}; + let curNum = 1; + let digits; + + while (!digitsToCubeCounts[digits] || digitsToCubeCounts[digits].count < n) { + const cube = getCube(curNum); + digits = getDigits(cube).sort().join(); + if (!digitsToCubeCounts[digits]) { + digitsToCubeCounts[digits] = { + count: 1, + smallestCube: cube + }; + } else { + digitsToCubeCounts[digits].count += 1; + } + + curNum++; + } + return digitsToCubeCounts[digits].smallestCube; +} ```