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)}`);