Sha256: 243008e2b5c466e6ec46c0aa09987a51f42f18c7c2dc104a1795daee75d3a0f2

Contents?: true

Size: 1.58 KB

Versions: 21

Compression:

Stored size: 1.58 KB

Contents

export default class PerfectNumbers {

  /**
   * Calculate all the divisors for a given number.
   * @param {number} number - natural number.
   * @returns {array} array that contains the divisors for a given number NOT including the number itself.
   */
  getDivisors(number) {

    let i;
    let divs = new Array();

    // Accepts only natural numbers greater than 1.
    if (number <= 1) {
      return divs;
  	}

    // 1 always divides everyone!
    divs.push(1);

    // Calculate the divisors up the the half of the number + 1
    for (i = 2; i <= number / 2; i++) {

      if (number % i === 0) {
        divs.push(i);
  		}
    }

    return divs;
  }

  /**
   * Classify a given number as perfect, abundant or deficient.
   * @param {number} number - number to be classified. Note: if the number is equal or smaller than 0,
   * then returns an error: Classification is only possible for natural numbers.
   * @returns {string} - string that contains the number classification (perfect, abundant or deficient).
   */
  classify(number) {

    let i, sum, result;

    // Check if the input is valid
    if (number <= 0) {
      throw new Error('Classification is only possible for natural numbers.');
    }

    // Factorize the current number.
    const divsArray = this.getDivisors(number);

    // Sum the factors.
    sum = divsArray.reduce((sum, div) => sum += div, 0);

    // Check if the number is perfect.
    if (sum === number) {
      result = 'perfect';
    }
    else if (sum > number) {
      result = 'abundant';
    }
    else {
      result = 'deficient';
    }

    return result;
  }

}

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
trackler-2.1.0.25 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.24 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.23 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.22 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.21 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.20 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.19 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.18 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.17 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.16 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.15 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.14 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.13 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.12 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.11 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.10 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.9 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.8 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.7 tracks/ecmascript/exercises/perfect-numbers/example.js
trackler-2.1.0.6 tracks/ecmascript/exercises/perfect-numbers/example.js