-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcollatz_conjecture.py
47 lines (34 loc) · 920 Bytes
/
collatz_conjecture.py
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
# -*- coding: utf-8 -*-
# File: collatz_conjecture.py
"""
Given a positive integer n, return a list of positive integers generated from
the Collatz conjecture:
Repeat the following until 1 is obtained: For even numbers, divide by 2; for
odd numbers, multiply by 3 and add 1.
### Usage 1:
```bash
python collatz_conjecture.py 7
```
### Usage 2:
```python
import collatz_conjecture
n: int = 7
generated: list[int] = collatz_conjecture.generate(n)
```
"""
import argparse
def generate(n: int) -> list[int]:
assert n > 0, f"{n} <= 0. n must be a positive integer."
lst = []
while n != 1:
n = n // 2 if n % 2 == 0 else 3 * n + 1
lst.append(n)
return lst
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"n", type=int,
help="Positive integer",
)
args = parser.parse_args()
print(*generate(args.n), sep=", ")