Adding a test in problem-14-Longest-collatz-sequence.english.md (#38401)
* Adding a test in problem-14-Longest-collatz-sequence.english.md Adding a test in problem-14-Longest-collatz-sequence.english.md * fix(curriculum): use more efficient algorithm Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
@ -48,6 +48,8 @@ tests:
|
||||
testString: assert.strictEqual(longestCollatzSequence(54512), 52527);
|
||||
- text: <code>longestCollatzSequence(100000)</code> should return 77031.
|
||||
testString: assert.strictEqual(longestCollatzSequence(100000), 77031);
|
||||
- text: <code>longestCollatzSequence(1000000)</code> should return 837799.
|
||||
testString: assert.strictEqual(longestCollatzSequence(1000000), 837799);
|
||||
|
||||
```
|
||||
|
||||
@ -79,33 +81,28 @@ longestCollatzSequence(14);
|
||||
|
||||
```js
|
||||
function longestCollatzSequence(limit) {
|
||||
let longestSequenceLength = 0;
|
||||
let startingNum = 0;
|
||||
|
||||
function sequenceLength(num) {
|
||||
let length = 1;
|
||||
|
||||
while (num >= 1) {
|
||||
if (num === 1) { break;
|
||||
} else if (num % 2 === 0) {
|
||||
num = num / 2;
|
||||
length++;
|
||||
} else {
|
||||
num = num * 3 + 1;
|
||||
length++;
|
||||
}
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
for (let i = 2; i < limit; i++) {
|
||||
let currSequenceLength = sequenceLength(i);
|
||||
if (currSequenceLength > longestSequenceLength) {
|
||||
longestSequenceLength = currSequenceLength;
|
||||
startingNum = i;
|
||||
let longest = 1;
|
||||
let maxLength = 1;
|
||||
for (let i = Math.floor(limit / 2); i < limit; i++) {
|
||||
let len = colLen(i);
|
||||
if (len > maxLength) {
|
||||
longest = i;
|
||||
maxLength = len;
|
||||
}
|
||||
}
|
||||
return startingNum;
|
||||
return longest;
|
||||
}
|
||||
|
||||
const knownSequence = { '1': 1 };
|
||||
|
||||
function colLen(n) {
|
||||
if (knownSequence[n]) {
|
||||
return knownSequence[n];
|
||||
} else {
|
||||
const len = n % 2 === 0 ? colLen(n / 2) + 1 : colLen((3 * n + 1) / 2) + 2;
|
||||
knownSequence[n] = len;
|
||||
return len;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
Reference in New Issue
Block a user