fix(curriculum): rework Project Euler 86 (#42189)
* fix: rework challenge to use argument in function * fix: add solution
This commit is contained in:
@ -14,22 +14,40 @@ A spider, S, sits in one corner of a cuboid room, measuring 6 by 5 by 3, and a f
|
|||||||
|
|
||||||
However, there are up to three "shortest" path candidates for any given cuboid and the shortest route doesn't always have integer length.
|
However, there are up to three "shortest" path candidates for any given cuboid and the shortest route doesn't always have integer length.
|
||||||
|
|
||||||
It can be shown that there are exactly 2060 distinct cuboids, ignoring rotations, with integer dimensions, up to a maximum size of M by M by M, for which the shortest route has integer length when M = 100. This is the least value of M for which the number of solutions first exceeds two thousand; the number of solutions when M = 99 is 1975.
|
It can be shown that there are exactly `2060` distinct cuboids, ignoring rotations, with integer dimensions, up to a maximum size of M by M by M, for which the shortest route has integer length when M = 100. This is the least value of M for which the number of solutions first exceeds two thousand; the number of solutions when M = 99 is `1975`.
|
||||||
|
|
||||||
Find the least value of M such that the number of solutions first exceeds one million.
|
Find the least value of M such that the number of solutions first exceeds `n`.
|
||||||
|
|
||||||
# --hints--
|
# --hints--
|
||||||
|
|
||||||
`cuboidRoute()` should return a number.
|
`cuboidRoute(2000)` should return a number.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
assert(typeof cuboidRoute() === 'number');
|
assert(typeof cuboidRoute(2000) === 'number');
|
||||||
```
|
```
|
||||||
|
|
||||||
`cuboidRoute()` should return 1818.
|
`cuboidRoute(2000)` should return `100`.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
assert.strictEqual(cuboidRoute(), 1818);
|
assert.strictEqual(cuboidRoute(2000), 100);
|
||||||
|
```
|
||||||
|
|
||||||
|
`cuboidRoute(25000)` should return `320`.
|
||||||
|
|
||||||
|
```js
|
||||||
|
assert.strictEqual(cuboidRoute(25000), 320);
|
||||||
|
```
|
||||||
|
|
||||||
|
`cuboidRoute(500000)` should return `1309`.
|
||||||
|
|
||||||
|
```js
|
||||||
|
assert.strictEqual(cuboidRoute(500000), 1309);
|
||||||
|
```
|
||||||
|
|
||||||
|
`cuboidRoute(1000000)` should return `1818`.
|
||||||
|
|
||||||
|
```js
|
||||||
|
assert.strictEqual(cuboidRoute(1000000), 1818);
|
||||||
```
|
```
|
||||||
|
|
||||||
# --seed--
|
# --seed--
|
||||||
@ -37,16 +55,40 @@ assert.strictEqual(cuboidRoute(), 1818);
|
|||||||
## --seed-contents--
|
## --seed-contents--
|
||||||
|
|
||||||
```js
|
```js
|
||||||
function cuboidRoute() {
|
function cuboidRoute(n) {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
cuboidRoute();
|
cuboidRoute(2000);
|
||||||
```
|
```
|
||||||
|
|
||||||
# --solutions--
|
# --solutions--
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// solution required
|
function cuboidRoute(n) {
|
||||||
|
// Based on https://www.mathblog.dk/project-euler-86-shortest-path-cuboid/
|
||||||
|
function getLength(a, b) {
|
||||||
|
return Math.sqrt(a ** 2 + b ** 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
let M = 2;
|
||||||
|
let counter = 0;
|
||||||
|
|
||||||
|
while (counter < n) {
|
||||||
|
M++;
|
||||||
|
for (let baseHeightWidth = 3; baseHeightWidth <= 2 * M; baseHeightWidth++) {
|
||||||
|
const pathLength = getLength(M, baseHeightWidth);
|
||||||
|
if (Number.isInteger(pathLength)) {
|
||||||
|
if (baseHeightWidth <= M) {
|
||||||
|
counter += Math.floor(baseHeightWidth / 2);
|
||||||
|
} else {
|
||||||
|
counter += 1 + M - Math.floor((baseHeightWidth + 1) / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return M;
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
Reference in New Issue
Block a user