Skip to content

Commit a3bbcd5

Browse files
[Project Euler] Added type hints and refactored the code for Problem 14 (#3047)
* added type hints and refactored the code a bit * made output statement more explicit * used f-strings and updated type hints * modified solution function to return an integer solution * updated docstring * Update sol1.py * Update sol2.py Co-authored-by: Dhruv <[email protected]>
1 parent 261be28 commit a3bbcd5

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

Diff for: project_euler/problem_14/sol1.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""
2+
Problem 14: https://projecteuler.net/problem=14
3+
24
Problem Statement:
35
The following iterative sequence is defined for the set of positive integers:
46
@@ -17,21 +19,21 @@
1719
"""
1820

1921

20-
def solution(n):
22+
def solution(n: int = 1000000) -> int:
2123
"""Returns the number under n that generates the longest sequence using the
2224
formula:
2325
n → n/2 (n is even)
2426
n → 3n + 1 (n is odd)
2527
2628
# The code below has been commented due to slow execution affecting Travis.
2729
# >>> solution(1000000)
28-
# {'counter': 525, 'largest_number': 837799}
30+
# 837799
2931
>>> solution(200)
30-
{'counter': 125, 'largest_number': 171}
32+
171
3133
>>> solution(5000)
32-
{'counter': 238, 'largest_number': 3711}
34+
3711
3335
>>> solution(15000)
34-
{'counter': 276, 'largest_number': 13255}
36+
13255
3537
"""
3638
largest_number = 0
3739
pre_counter = 0
@@ -51,11 +53,8 @@ def solution(n):
5153
if counter > pre_counter:
5254
largest_number = input1
5355
pre_counter = counter
54-
return {"counter": pre_counter, "largest_number": largest_number}
56+
return largest_number
5557

5658

5759
if __name__ == "__main__":
58-
result = solution(int(input().strip()))
59-
print(
60-
("Largest Number:", result["largest_number"], "->", result["counter"], "digits")
61-
)
60+
print(solution(int(input().strip())))

Diff for: project_euler/problem_14/sol2.py

+11-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""
2+
Problem 14: https://projecteuler.net/problem=14
3+
24
Collatz conjecture: start with any positive integer n. Next term obtained from
35
the previous term as follows:
46
@@ -23,9 +25,10 @@
2325
2426
Which starting number, under one million, produces the longest chain?
2527
"""
28+
from typing import List
2629

2730

28-
def collatz_sequence(n):
31+
def collatz_sequence(n: int) -> List[int]:
2932
"""Returns the Collatz sequence for n."""
3033
sequence = [n]
3134
while n != 1:
@@ -37,27 +40,23 @@ def collatz_sequence(n):
3740
return sequence
3841

3942

40-
def solution(n):
43+
def solution(n: int = 1000000) -> int:
4144
"""Returns the number under n that generates the longest Collatz sequence.
4245
4346
# The code below has been commented due to slow execution affecting Travis.
4447
# >>> solution(1000000)
45-
# {'counter': 525, 'largest_number': 837799}
48+
# 837799
4649
>>> solution(200)
47-
{'counter': 125, 'largest_number': 171}
50+
171
4851
>>> solution(5000)
49-
{'counter': 238, 'largest_number': 3711}
52+
3711
5053
>>> solution(15000)
51-
{'counter': 276, 'largest_number': 13255}
54+
13255
5255
"""
5356

5457
result = max([(len(collatz_sequence(i)), i) for i in range(1, n)])
55-
return {"counter": result[0], "largest_number": result[1]}
58+
return result[1]
5659

5760

5861
if __name__ == "__main__":
59-
result = solution(int(input().strip()))
60-
print(
61-
"Longest Collatz sequence under one million is %d with length %d"
62-
% (result["largest_number"], result["counter"])
63-
)
62+
print(solution(int(input().strip())))

0 commit comments

Comments
 (0)