-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path07_collatz_sequence.py
More file actions
52 lines (38 loc) · 983 Bytes
/
Copy path07_collatz_sequence.py
File metadata and controls
52 lines (38 loc) · 983 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Collatz sequence
"""
Given a positve integer n, find the length of its Collatz sequence.
Collatz sequence is generated sequentially where
n = n / 2 if n is even
n = 3 * n + 1 if n is odd
And the sequence ends if n = 1
Example 1
Input
n = 11
Output
15
Explanation
The Collatz sequence is:
[11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
and its length is 15.
"""
# solution
import unittest
def collatz_sequence(n):
l=[n]
while(n!=1):
if(n%2==0):
n=n//2
l.append(n)
elif(n%2==1):
n=3*n+1
l.append(n)
return len(l)
class TestCollatzSequence(unittest.TestCase):
def test_1(self):
self.assertEqual(collatz_sequence(11), 15)
def test_2(self):
self.assertEqual(collatz_sequence(1), 1)
def test_3(self):
self.assertEqual(collatz_sequence(2), 2)
if __name__ == '__main__':
unittest.main(verbosity=2)