Community Coding Challenge 2
Community Coding Challenge 2 => Solution by Geert-Jan Klaps
JavaScript
/** Collatz sequence generator class */
class SequenceGenerator {
/**
* Get number with longest Collatz sequence
* @param {number} highestNumber - Highest number to check the sequence length
* @return {number} number with longest Collatz sequence.
*/
static getNumberWithLongestSequence(highestNumber) {
let number = 0;
let sequence = [];
for(let i = highestNumber; i > 1; i--){
let currentSequence = this.getSequence(i);
if(currentSequence.length > sequence.length){
sequence = currentSequence;
number = i;
}
}
return number;
}
/**
* Generate Collatz sequence for a given number
* @param {number} number - Number to generate Collatz sequence for
* @return {array} Collatz sequence for given number
*/
static getSequence(number) {
const sequence = [];
let result = number;
// Add first number to the sequence
sequence.push(number);
// Generate the Collatz sequence
while (result > 1) {
result = this.applyCollatzSequenceFormula(result);
sequence.push(result);
}
return sequence;
}
/**
* Generate next Collatz sequence number for a given number
* @param {number} number - Number to apply the Collatz sequence formula to
* @return {number} Result of Collatz sequence formula
*/
static applyCollatzSequenceFormula(number) {
let resultNumber = 0;
if (number % 2 == 1) {
resultNumber = (3 * number) + 1;
} else {
resultNumber = number / 2;
}
return resultNumber;
}
}
// Display result
document.write(`Number with longest sequence under 1000000: ${SequenceGenerator.getNumberWithLongestSequence(999999)}`);