diff --git a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.test.js b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.test.js index 34ae268d..409b8583 100644 --- a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.test.js +++ b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.test.js @@ -22,7 +22,7 @@ describe('max_array_sum', () => { expect(answer).toStrictEqual(test.expected); }); - expect(TEST_CASES).toHaveLength(3); + expect(ALL_TEST_CASES).toHaveLength(4); }); it('maxSubsetSum edge case zero', () => { diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.test.js b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.test.js index 2775b7c3..fc6fa335 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.test.js +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.test.js @@ -41,6 +41,6 @@ describe('ctci_recursive_staircase', () => { }); }); - expect(TEST_CASES).toHaveLength(3); + expect(TEST_CASES_GENERALIZED).toHaveLength(3); }); }); diff --git a/src/projecteuler/helpers/divisors.js b/src/projecteuler/helpers/divisors.js index 8feede2d..f239d2dc 100644 --- a/src/projecteuler/helpers/divisors.js +++ b/src/projecteuler/helpers/divisors.js @@ -112,6 +112,9 @@ export const primeFactors = (target) => { return { 'factors': factors, 'cycles': cycles }; }; +export const isPrime = (target) => + target !== 1 && target === nextPrimeFactor(target).factor; + export const abundance = (target) => { const theDivisors = properDivisors(target); const divSum = sum(theDivisors); diff --git a/src/projecteuler/helpers/divisors.test.js b/src/projecteuler/helpers/divisors.test.js index cb1d8b47..f91cbc01 100644 --- a/src/projecteuler/helpers/divisors.test.js +++ b/src/projecteuler/helpers/divisors.test.js @@ -1,15 +1,17 @@ import { describe, expect, it } from '@jest/globals'; import { - divisors, abundance, + divisors, + isPrime, nextPrimeFactor, primeFactors, + properDivisors, ___DIVISORS_DEFICIENT___, ___DIVISORS_PERFECT___, ___DIVISORS_ABUNDANT___ } from './divisors.js'; -describe('divisors of a number', () => { +describe('divisors and prime numbers', () => { it('divisors of one', () => { expect.assertions(1); @@ -35,6 +37,16 @@ describe('divisors of a number', () => { ]); }); + it('proper divisors of a number', () => { + expect.assertions(5); + + expect(properDivisors(1)).toStrictEqual([]); + expect(properDivisors(2)).toStrictEqual([1]); + expect(properDivisors(8)).toStrictEqual([1, 2, 4]); + expect(properDivisors(9)).toStrictEqual([1, 3]); + expect(properDivisors(16)).toStrictEqual([1, 2, 4, 8]); + }); + it('next prime factor of a target number', () => { expect.assertions(5); @@ -81,6 +93,24 @@ describe('divisors of a number', () => { }); }); + it('some numbers are prime', () => { + expect.assertions(4); + + expect(isPrime(1)).toBe(false); + expect(isPrime(2)).toBe(true); + expect(isPrime(7)).toBe(true); + expect(isPrime(13)).toBe(true); + }); + + it('some numbers are not prime', () => { + expect.assertions(4); + + expect(isPrime(4)).toBe(false); + expect(isPrime(10)).toBe(false); + expect(isPrime(100)).toBe(false); + expect(isPrime(3000)).toBe(false); + }); + it('abundance of a integer number', () => { expect.assertions(3);