Skip to content

Commit 0cab3a5

Browse files
pikuletshermanhui
authored andcommitted
[mypy] fix type annotations for all Project Euler problems (TheAlgorithms#4747)
* [mypy] fix type annotations for problem003/sol1 and problem003/sol3 * [mypy] fix type annotations for project euler problem007/sol2 * [mypy] fix type annotations for project euler problem008/sol2 * [mypy] fix type annotations for project euler problem009/sol1 * [mypy] fix type annotations for project euler problem014/sol1 * [mypy] fix type annotations for project euler problem 025/sol2 * [mypy] fix type annotations for project euler problem026/sol1.py * [mypy] fix type annotations for project euler problem037/sol1 * [mypy] fix type annotations for project euler problem044/sol1 * [mypy] fix type annotations for project euler problem046/sol1 * [mypy] fix type annotations for project euler problem051/sol1 * [mypy] fix type annotations for project euler problem074/sol2 * [mypy] fix type annotations for project euler problem080/sol1 * [mypy] fix type annotations for project euler problem099/sol1 * [mypy] fix type annotations for project euler problem101/sol1 * [mypy] fix type annotations for project euler problem188/sol1 * [mypy] fix type annotations for project euler problem191/sol1 * [mypy] fix type annotations for project euler problem207/sol1 * [mypy] fix type annotations for project euler problem551/sol1
1 parent 23a1a28 commit 0cab3a5

File tree

20 files changed

+43
-26
lines changed

20 files changed

+43
-26
lines changed

Diff for: project_euler/problem_003/sol1.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ def solution(n: int = 600851475143) -> int:
9292
return n
9393
for i in range(3, int(math.sqrt(n)) + 1, 2):
9494
if n % i == 0:
95-
if isprime(n / i):
96-
max_number = n / i
95+
if isprime(n // i):
96+
max_number = n // i
9797
break
9898
elif isprime(i):
9999
max_number = i

Diff for: project_euler/problem_003/sol3.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def solution(n: int = 600851475143) -> int:
5757
i += 1
5858
ans = i
5959
while n % i == 0:
60-
n = n / i
60+
n = n // i
6161
i += 1
6262
return int(ans)
6363

Diff for: project_euler/problem_007/sol2.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def solution(nth: int = 10001) -> int:
7373
raise TypeError("Parameter nth must be int or castable to int.") from None
7474
if nth <= 0:
7575
raise ValueError("Parameter nth must be greater than or equal to one.")
76-
primes = []
76+
primes: list[int] = []
7777
num = 2
7878
while len(primes) < nth:
7979
if isprime(num):

Diff for: project_euler/problem_008/sol2.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ def solution(n: str = N) -> int:
7070
"""
7171

7272
return max(
73-
reduce(lambda x, y: int(x) * int(y), n[i : i + 13]) for i in range(len(n) - 12)
73+
# mypy cannot properly interpret reduce
74+
int(reduce(lambda x, y: str(int(x) * int(y)), n[i : i + 13]))
75+
for i in range(len(n) - 12)
7476
)
7577

7678

Diff for: project_euler/problem_009/sol1.py

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ def solution() -> int:
3636
if (a ** 2) + (b ** 2) == (c ** 2):
3737
return a * b * c
3838

39+
return -1
40+
3941

4042
def solution_fast() -> int:
4143
"""
@@ -55,6 +57,8 @@ def solution_fast() -> int:
5557
if a < b < c and (a ** 2) + (b ** 2) == (c ** 2):
5658
return a * b * c
5759

60+
return -1
61+
5862

5963
def benchmark() -> None:
6064
"""

Diff for: project_euler/problem_014/sol1.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def solution(n: int = 1000000) -> int:
4444

4545
while number > 1:
4646
if number % 2 == 0:
47-
number /= 2
47+
number //= 2
4848
counter += 1
4949
else:
5050
number = (3 * number) + 1

Diff for: project_euler/problem_025/sol2.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@
2323
What is the index of the first term in the Fibonacci sequence to contain 1000
2424
digits?
2525
"""
26+
from typing import Generator
2627

2728

28-
def fibonacci_generator() -> int:
29+
def fibonacci_generator() -> Generator[int, None, None]:
2930
"""
3031
A generator that produces numbers in the Fibonacci sequence
3132

Diff for: project_euler/problem_026/sol1.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def solution(numerator: int = 1, digit: int = 1000) -> int:
3939
longest_list_length = 0
4040

4141
for divide_by_number in range(numerator, digit + 1):
42-
has_been_divided = []
42+
has_been_divided: list[int] = []
4343
now_divide = numerator
4444
for division_cycle in range(1, digit + 1):
4545
if now_divide in has_been_divided:

Diff for: project_euler/problem_037/sol1.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def compute_truncated_primes(count: int = 11) -> list[int]:
7676
>>> compute_truncated_primes(11)
7777
[23, 37, 53, 73, 313, 317, 373, 797, 3137, 3797, 739397]
7878
"""
79-
list_truncated_primes = []
79+
list_truncated_primes: list[int] = []
8080
num = 13
8181
while len(list_truncated_primes) != count:
8282
if validate(num):

Diff for: project_euler/problem_044/sol1.py

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ def solution(limit: int = 5000) -> int:
4242
if is_pentagonal(a) and is_pentagonal(b):
4343
return b
4444

45+
return -1
46+
4547

4648
if __name__ == "__main__":
4749
print(f"{solution() = }")

Diff for: project_euler/problem_046/sol1.py

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ def compute_nums(n: int) -> list[int]:
8585
if len(list_nums) == n:
8686
return list_nums
8787

88+
return []
89+
8890

8991
def solution() -> int:
9092
"""Return the solution to the problem"""

Diff for: project_euler/problem_051/sol1.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,12 @@ def digit_replacements(number: int) -> list[list[int]]:
6363
>>> digit_replacements(3112)
6464
[[3002, 3112, 3222, 3332, 3442, 3552, 3662, 3772, 3882, 3992]]
6565
"""
66-
number = str(number)
66+
number_str = str(number)
6767
replacements = []
6868
digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
6969

70-
for duplicate in Counter(number) - Counter(set(number)):
71-
family = [int(number.replace(duplicate, digit)) for digit in digits]
70+
for duplicate in Counter(number_str) - Counter(set(number_str)):
71+
family = [int(number_str.replace(duplicate, digit)) for digit in digits]
7272
replacements.append(family)
7373

7474
return replacements
@@ -106,6 +106,8 @@ def solution(family_length: int = 8) -> int:
106106

107107
return min(primes_in_family)
108108

109+
return -1
110+
109111

110112
if __name__ == "__main__":
111113
print(solution())

Diff for: project_euler/problem_074/sol2.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
counter increases.
2121
"""
2222

23-
factorial_cache = {}
24-
factorial_sum_cache = {}
23+
factorial_cache: dict[int, int] = {}
24+
factorial_sum_cache: dict[int, int] = {}
2525

2626

2727
def factorial(a: int) -> int:

Diff for: project_euler/problem_080/sol1.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ def solution() -> int:
2626
sqrt_number = number.sqrt(decimal_context)
2727
if len(str(sqrt_number)) > 1:
2828
answer += int(str(sqrt_number)[0])
29-
sqrt_number = str(sqrt_number)[2:101]
30-
answer += sum(int(x) for x in sqrt_number)
29+
sqrt_number_str = str(sqrt_number)[2:101]
30+
answer += sum(int(x) for x in sqrt_number_str)
3131
return answer
3232

3333

3434
if __name__ == "__main__":
3535
import doctest
3636

3737
doctest.testmod()
38+
print(f"{solution() = }")

Diff for: project_euler/problem_099/sol1.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ def solution(data_file: str = "base_exp.txt") -> int:
2222
>>> solution()
2323
709
2424
"""
25-
largest = [0, 0]
25+
largest: float = 0
26+
result = 0
2627
for i, line in enumerate(open(os.path.join(os.path.dirname(__file__), data_file))):
2728
a, x = list(map(int, line.split(",")))
28-
if x * log10(a) > largest[0]:
29-
largest = [x * log10(a), i + 1]
30-
return largest[1]
29+
if x * log10(a) > largest:
30+
largest = x * log10(a)
31+
result = i + 1
32+
return result
3133

3234

3335
if __name__ == "__main__":

Diff for: project_euler/problem_101/sol1.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ def solution(func: Callable[[int], int] = question_function, order: int = 10) ->
202202
]
203203

204204
ret: int = 0
205-
poly: int
205+
poly: Callable[[int], int]
206206
x_val: int
207207

208208
for poly in polynomials:

Diff for: project_euler/problem_188/sol1.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"""
2020

2121

22-
# small helper function for modular exponentiation
22+
# small helper function for modular exponentiation (fast exponentiation algorithm)
2323
def _modexpt(base: int, exponent: int, modulo_value: int) -> int:
2424
"""
2525
Returns the modular exponentiation, that is the value
@@ -36,7 +36,7 @@ def _modexpt(base: int, exponent: int, modulo_value: int) -> int:
3636
if exponent == 1:
3737
return base
3838
if exponent % 2 == 0:
39-
x = _modexpt(base, exponent / 2, modulo_value) % modulo_value
39+
x = _modexpt(base, exponent // 2, modulo_value) % modulo_value
4040
return (x * x) % modulo_value
4141
else:
4242
return (base * _modexpt(base, exponent - 1, modulo_value)) % modulo_value

Diff for: project_euler/problem_191/sol1.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"""
2727

2828

29-
cache = {}
29+
cache: dict[tuple[int, int, int], int] = {}
3030

3131

3232
def _calculate(days: int, absent: int, late: int) -> int:

Diff for: project_euler/problem_207/sol1.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def solution(max_proportion: float = 1 / 12345) -> int:
9090
perfect_partitions += 1
9191
if perfect_partitions > 0:
9292
if perfect_partitions / total_partitions < max_proportion:
93-
return partition_candidate
93+
return int(partition_candidate)
9494
integer += 1
9595

9696

Diff for: project_euler/problem_551/sol1.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
Find a(10^15)
1313
"""
1414

15+
1516
ks = [k for k in range(2, 20 + 1)]
1617
base = [10 ** k for k in range(ks[-1] + 1)]
17-
memo = {}
18+
memo: dict[int, dict[int, list[list[int]]]] = {}
1819

1920

2021
def next_term(a_i, k, i, n):

0 commit comments

Comments
 (0)