Skip to content

Commit 0357a23

Browse files
merge: Add the Collatz Conjecture (TheAlgorithms#1022)
* Create CollatzConjecture.js * Create CollatzConjecture.test.js * Update CollatzConjecture.js * Update CollatzConjecture.test.js * Rename CollatzConjecture.js to CollatzSequence.js * Update and rename CollatzConjecture.test.js to CollatzSequence.test.js * Update CollatzSequence.js * Update CollatzSequence.test.js * Update CollatzSequence.test.js * Fix styling errors * Add suggestion Co-authored-by: Rak Laptudirm <rak@laptudirm.com> * Update CollatzSequence.js * Update CollatzSequence.js * Update comments to match the Collatz Sequence * Update CollatzSequence.test.js Co-authored-by: Rak Laptudirm <rak@laptudirm.com>
1 parent dc67506 commit 0357a23

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

Maths/CollatzSequence.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @function collatz
3+
* @description Applies the Collatz Sequence on a specified number.
4+
* The Collatz Sequence states that every natural number will always fall in a 1, 2, 4 loop when iterated under the following function:
5+
* If the number is even, divide by 2, and if its odd, multiply it by 3 and add 1.
6+
*
7+
* @parama {Integer} n The number to apply the Collatz Sequence to.
8+
*
9+
* @return An array of steps and the final result..
10+
*
11+
* @see [Collatz Conjecture](https://en.wikipedia.org/wiki/Collatz_conjecture)
12+
*
13+
* @example collatz(1) = { result: 1, steps: [] }
14+
* @example collatz(5) = { result: 1, steps: [16, 8, 4, 2, 1] }
15+
*/
16+
export function collatz (n) {
17+
const steps = []
18+
19+
while (n !== 1) {
20+
if (n % 2 === 0) {
21+
n = n / 2
22+
} else {
23+
n = 3 * n + 1
24+
}
25+
26+
steps.push(n)
27+
}
28+
29+
return { result: n, steps: steps }
30+
}

Maths/test/CollatzSequence.test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { collatz } from '../CollatzSequence'
2+
3+
describe('The Collatz Sequence', () => {
4+
it('Should be 1', () => {
5+
expect(collatz(1)).toStrictEqual({ result: 1, steps: [] })
6+
expect(collatz(5)).toStrictEqual({ result: 1, steps: [16, 8, 4, 2, 1] })
7+
})
8+
})

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy