From 333edc17ad337264093a22e545262f602346798c Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Mon, 23 May 2022 13:08:10 -0700 Subject: [PATCH 01/15] Create CollatzConjecture.js --- Maths/CollatzConjecture.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Maths/CollatzConjecture.js diff --git a/Maths/CollatzConjecture.js b/Maths/CollatzConjecture.js new file mode 100644 index 0000000000..e079bbd270 --- /dev/null +++ b/Maths/CollatzConjecture.js @@ -0,0 +1,11 @@ +export function collatz (n) { + while (n > 1) { + if (n % 2 === 0) { + n = n / 2; + } else { + n = 3 * n + 1; + } + } + + return n; +} From 44cd9d5edfe394bc0aa87c3003bc67220a26686b Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Mon, 23 May 2022 13:10:34 -0700 Subject: [PATCH 02/15] Create CollatzConjecture.test.js --- Maths/test/CollatzConjecture.test.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Maths/test/CollatzConjecture.test.js diff --git a/Maths/test/CollatzConjecture.test.js b/Maths/test/CollatzConjecture.test.js new file mode 100644 index 0000000000..13a63fe297 --- /dev/null +++ b/Maths/test/CollatzConjecture.test.js @@ -0,0 +1,9 @@ +import { collatz } from '../CollatzConjecture'; + +describe('The Collatz Conjecture', () => { + it('Should be 1', () => { + expect(collatz(1)).toBe(1) + expect(collatz(5)).toBe(1) + expect(collatz(51351)).toBe(1) + }) +}) From 08672d3005a4821a301ff218df1cf25bf718ba0a Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Mon, 23 May 2022 13:14:00 -0700 Subject: [PATCH 03/15] Update CollatzConjecture.js --- Maths/CollatzConjecture.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Maths/CollatzConjecture.js b/Maths/CollatzConjecture.js index e079bbd270..02fe48c8ec 100644 --- a/Maths/CollatzConjecture.js +++ b/Maths/CollatzConjecture.js @@ -1,11 +1,11 @@ export function collatz (n) { while (n > 1) { if (n % 2 === 0) { - n = n / 2; + n = n / 2 } else { - n = 3 * n + 1; + n = 3 * n + 1 } } - - return n; + + return n } From bf2f4463469264e874d3ab63ed3d970b299b0d66 Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Mon, 23 May 2022 13:14:21 -0700 Subject: [PATCH 04/15] Update CollatzConjecture.test.js --- Maths/test/CollatzConjecture.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/test/CollatzConjecture.test.js b/Maths/test/CollatzConjecture.test.js index 13a63fe297..2e1e6fed48 100644 --- a/Maths/test/CollatzConjecture.test.js +++ b/Maths/test/CollatzConjecture.test.js @@ -1,4 +1,4 @@ -import { collatz } from '../CollatzConjecture'; +import { collatz } from '../CollatzConjecture' describe('The Collatz Conjecture', () => { it('Should be 1', () => { From 63234cc59da40bbe3ec6c5cebead8fcf7985a692 Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Mon, 23 May 2022 13:20:45 -0700 Subject: [PATCH 05/15] Rename CollatzConjecture.js to CollatzSequence.js --- Maths/{CollatzConjecture.js => CollatzSequence.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Maths/{CollatzConjecture.js => CollatzSequence.js} (100%) diff --git a/Maths/CollatzConjecture.js b/Maths/CollatzSequence.js similarity index 100% rename from Maths/CollatzConjecture.js rename to Maths/CollatzSequence.js From 364465feb64bb1c220d10272d1cdb3a40fa36fd6 Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Mon, 23 May 2022 13:21:48 -0700 Subject: [PATCH 06/15] Update and rename CollatzConjecture.test.js to CollatzSequence.test.js --- .../test/{CollatzConjecture.test.js => CollatzSequence.test.js} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Maths/test/{CollatzConjecture.test.js => CollatzSequence.test.js} (79%) diff --git a/Maths/test/CollatzConjecture.test.js b/Maths/test/CollatzSequence.test.js similarity index 79% rename from Maths/test/CollatzConjecture.test.js rename to Maths/test/CollatzSequence.test.js index 2e1e6fed48..9df01cad62 100644 --- a/Maths/test/CollatzConjecture.test.js +++ b/Maths/test/CollatzSequence.test.js @@ -1,4 +1,4 @@ -import { collatz } from '../CollatzConjecture' +import { collatz } from '../CollatzSequence' describe('The Collatz Conjecture', () => { it('Should be 1', () => { From 0f907b16bd46f15684bf07ea0dd43e00b573beba Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Tue, 24 May 2022 08:20:21 -0700 Subject: [PATCH 07/15] Update CollatzSequence.js --- Maths/CollatzSequence.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Maths/CollatzSequence.js b/Maths/CollatzSequence.js index 02fe48c8ec..b32759238a 100644 --- a/Maths/CollatzSequence.js +++ b/Maths/CollatzSequence.js @@ -1,11 +1,30 @@ +/** + * @function collatz + * @description Applies the Collatz Conjecture on a specified number. + * The Collatz Conjecture states that a number will always equal 1 after the following formula is applied: + * If the number is even, divide by 2, and if its odd, multiply it by 3 and add 1. + * + * @parama {Integer} n The number to apply the Collatz Conjecture to. + * + * @return An array of steps and the final result.. + * + * @see [Collatz Conjecture](https://en.wikipedia.org/wiki/Collatz_conjecture) + * + * @example collatz(1) = { result: 1, steps: [] } + * @example collatz(5) = { result: 1, steps: [16, 8, 4, 2, 1] } +*/ export function collatz (n) { + const steps = [] + while (n > 1) { if (n % 2 === 0) { n = n / 2 } else { n = 3 * n + 1 } + + steps.push(n) } - return n + return { result: n, steps: steps } } From 08ccb61fea3d80d80fb047ca2f112e75c01dd63a Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Tue, 24 May 2022 08:23:18 -0700 Subject: [PATCH 08/15] Update CollatzSequence.test.js --- Maths/test/CollatzSequence.test.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Maths/test/CollatzSequence.test.js b/Maths/test/CollatzSequence.test.js index 9df01cad62..83d80c7d39 100644 --- a/Maths/test/CollatzSequence.test.js +++ b/Maths/test/CollatzSequence.test.js @@ -2,8 +2,7 @@ import { collatz } from '../CollatzSequence' describe('The Collatz Conjecture', () => { it('Should be 1', () => { - expect(collatz(1)).toBe(1) - expect(collatz(5)).toBe(1) - expect(collatz(51351)).toBe(1) + expect(collatz(1)).toBe({ result: 1, steps: [] }) + expect(collatz(5)).toBe({ result: 1, steps: [16, 8, 4, 2, 1] }) }) }) From 2cb08bc6a51c83bf71d7521eb8cb8329c5a3913e Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Tue, 24 May 2022 08:25:34 -0700 Subject: [PATCH 09/15] Update CollatzSequence.test.js --- Maths/test/CollatzSequence.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Maths/test/CollatzSequence.test.js b/Maths/test/CollatzSequence.test.js index 83d80c7d39..b7e290063b 100644 --- a/Maths/test/CollatzSequence.test.js +++ b/Maths/test/CollatzSequence.test.js @@ -2,7 +2,7 @@ import { collatz } from '../CollatzSequence' describe('The Collatz Conjecture', () => { it('Should be 1', () => { - expect(collatz(1)).toBe({ result: 1, steps: [] }) - expect(collatz(5)).toBe({ result: 1, steps: [16, 8, 4, 2, 1] }) + expect(collatz(1)).toStrictEqual({ result: 1, steps: [] }) + expect(collatz(5)).toStrictEqual({ result: 1, steps: [16, 8, 4, 2, 1] }) }) }) From 71b45ea1c8585dd5e14395b753b72721d47df2b6 Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Tue, 24 May 2022 08:27:40 -0700 Subject: [PATCH 10/15] Fix styling errors --- Maths/CollatzSequence.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Maths/CollatzSequence.js b/Maths/CollatzSequence.js index b32759238a..9a58d38ac4 100644 --- a/Maths/CollatzSequence.js +++ b/Maths/CollatzSequence.js @@ -15,14 +15,14 @@ */ export function collatz (n) { const steps = [] - + while (n > 1) { if (n % 2 === 0) { n = n / 2 } else { n = 3 * n + 1 } - + steps.push(n) } From f019897ce545cebfe02becbbca085681ee2ab37e Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Tue, 24 May 2022 11:56:50 -0700 Subject: [PATCH 11/15] Add suggestion Co-authored-by: Rak Laptudirm --- Maths/CollatzSequence.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/CollatzSequence.js b/Maths/CollatzSequence.js index 9a58d38ac4..c1c8f78613 100644 --- a/Maths/CollatzSequence.js +++ b/Maths/CollatzSequence.js @@ -1,7 +1,7 @@ /** * @function collatz * @description Applies the Collatz Conjecture on a specified number. - * The Collatz Conjecture states that a number will always equal 1 after the following formula is applied: + * The Collatz Conjecture states that every natural number will always fall in a 1, 2, 4 loop when iterated under the following function: * If the number is even, divide by 2, and if its odd, multiply it by 3 and add 1. * * @parama {Integer} n The number to apply the Collatz Conjecture to. From 9c78b0cacd272670c6e1430ab63f0260cbc3007d Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Wed, 25 May 2022 11:12:30 -0700 Subject: [PATCH 12/15] Update CollatzSequence.js --- Maths/CollatzSequence.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/CollatzSequence.js b/Maths/CollatzSequence.js index c1c8f78613..9acc482d48 100644 --- a/Maths/CollatzSequence.js +++ b/Maths/CollatzSequence.js @@ -16,7 +16,7 @@ export function collatz (n) { const steps = [] - while (n > 1) { + while (n != 1) { if (n % 2 === 0) { n = n / 2 } else { From 60404ccbcf85aecbe1a4367e91bbc3f233ec6f57 Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Wed, 25 May 2022 11:16:28 -0700 Subject: [PATCH 13/15] Update CollatzSequence.js --- Maths/CollatzSequence.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/CollatzSequence.js b/Maths/CollatzSequence.js index 9acc482d48..c9eed474b4 100644 --- a/Maths/CollatzSequence.js +++ b/Maths/CollatzSequence.js @@ -16,7 +16,7 @@ export function collatz (n) { const steps = [] - while (n != 1) { + while (n !== 1) { if (n % 2 === 0) { n = n / 2 } else { From 33840a7c90a5d3090c8219ae2613c9640c0e21ab Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Wed, 25 May 2022 13:24:19 -0700 Subject: [PATCH 14/15] Update comments to match the Collatz Sequence --- Maths/CollatzSequence.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Maths/CollatzSequence.js b/Maths/CollatzSequence.js index c9eed474b4..d8ead61cc2 100644 --- a/Maths/CollatzSequence.js +++ b/Maths/CollatzSequence.js @@ -1,10 +1,10 @@ /** * @function collatz - * @description Applies the Collatz Conjecture on a specified number. - * The Collatz Conjecture states that every natural number will always fall in a 1, 2, 4 loop when iterated under the following function: + * @description Applies the Collatz Sequence on a specified number. + * The Collatz Sequence states that every natural number will always fall in a 1, 2, 4 loop when iterated under the following function: * If the number is even, divide by 2, and if its odd, multiply it by 3 and add 1. * - * @parama {Integer} n The number to apply the Collatz Conjecture to. + * @parama {Integer} n The number to apply the Collatz Sequence to. * * @return An array of steps and the final result.. * From 66c8b56186dda4da84dc0e60655d33d835710df1 Mon Sep 17 00:00:00 2001 From: Exortions <75327059+Exortions@users.noreply.github.com> Date: Wed, 25 May 2022 13:24:55 -0700 Subject: [PATCH 15/15] Update CollatzSequence.test.js --- Maths/test/CollatzSequence.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/test/CollatzSequence.test.js b/Maths/test/CollatzSequence.test.js index b7e290063b..f837bd90d7 100644 --- a/Maths/test/CollatzSequence.test.js +++ b/Maths/test/CollatzSequence.test.js @@ -1,6 +1,6 @@ import { collatz } from '../CollatzSequence' -describe('The Collatz Conjecture', () => { +describe('The Collatz Sequence', () => { it('Should be 1', () => { expect(collatz(1)).toStrictEqual({ result: 1, steps: [] }) expect(collatz(5)).toStrictEqual({ result: 1, steps: [16, 8, 4, 2, 1] })