Skip to content

Commit

Permalink
[mypy] fix type annotations for all Project Euler problems (TheAlgori…
Browse files Browse the repository at this point in the history
…thms#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
  • Loading branch information
pikulet committed Oct 11, 2021
1 parent e311b02 commit bcfca67
Show file tree
Hide file tree
Showing 20 changed files with 43 additions and 26 deletions.
4 changes: 2 additions & 2 deletions project_euler/problem_003/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ def solution(n: int = 600851475143) -> int:
return n
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
if isprime(n / i):
max_number = n / i
if isprime(n // i):
max_number = n // i
break
elif isprime(i):
max_number = i
Expand Down
2 changes: 1 addition & 1 deletion project_euler/problem_003/sol3.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def solution(n: int = 600851475143) -> int:
i += 1
ans = i
while n % i == 0:
n = n / i
n = n // i
i += 1
return int(ans)

Expand Down
2 changes: 1 addition & 1 deletion project_euler/problem_007/sol2.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def solution(nth: int = 10001) -> int:
raise TypeError("Parameter nth must be int or castable to int.") from None
if nth <= 0:
raise ValueError("Parameter nth must be greater than or equal to one.")
primes = []
primes: list[int] = []
num = 2
while len(primes) < nth:
if isprime(num):
Expand Down
4 changes: 3 additions & 1 deletion project_euler/problem_008/sol2.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ def solution(n: str = N) -> int:
"""

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


Expand Down
4 changes: 4 additions & 0 deletions project_euler/problem_009/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ def solution() -> int:
if (a ** 2) + (b ** 2) == (c ** 2):
return a * b * c

return -1


def solution_fast() -> int:
"""
Expand All @@ -55,6 +57,8 @@ def solution_fast() -> int:
if a < b < c and (a ** 2) + (b ** 2) == (c ** 2):
return a * b * c

return -1


def benchmark() -> None:
"""
Expand Down
2 changes: 1 addition & 1 deletion project_euler/problem_014/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def solution(n: int = 1000000) -> int:

while number > 1:
if number % 2 == 0:
number /= 2
number //= 2
counter += 1
else:
number = (3 * number) + 1
Expand Down
3 changes: 2 additions & 1 deletion project_euler/problem_025/sol2.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@
What is the index of the first term in the Fibonacci sequence to contain 1000
digits?
"""
from typing import Generator


def fibonacci_generator() -> int:
def fibonacci_generator() -> Generator[int, None, None]:
"""
A generator that produces numbers in the Fibonacci sequence
Expand Down
2 changes: 1 addition & 1 deletion project_euler/problem_026/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def solution(numerator: int = 1, digit: int = 1000) -> int:
longest_list_length = 0

for divide_by_number in range(numerator, digit + 1):
has_been_divided = []
has_been_divided: list[int] = []
now_divide = numerator
for division_cycle in range(1, digit + 1):
if now_divide in has_been_divided:
Expand Down
2 changes: 1 addition & 1 deletion project_euler/problem_037/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def compute_truncated_primes(count: int = 11) -> list[int]:
>>> compute_truncated_primes(11)
[23, 37, 53, 73, 313, 317, 373, 797, 3137, 3797, 739397]
"""
list_truncated_primes = []
list_truncated_primes: list[int] = []
num = 13
while len(list_truncated_primes) != count:
if validate(num):
Expand Down
2 changes: 2 additions & 0 deletions project_euler/problem_044/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ def solution(limit: int = 5000) -> int:
if is_pentagonal(a) and is_pentagonal(b):
return b

return -1


if __name__ == "__main__":
print(f"{solution() = }")
2 changes: 2 additions & 0 deletions project_euler/problem_046/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ def compute_nums(n: int) -> list[int]:
if len(list_nums) == n:
return list_nums

return []


def solution() -> int:
"""Return the solution to the problem"""
Expand Down
8 changes: 5 additions & 3 deletions project_euler/problem_051/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,12 @@ def digit_replacements(number: int) -> list[list[int]]:
>>> digit_replacements(3112)
[[3002, 3112, 3222, 3332, 3442, 3552, 3662, 3772, 3882, 3992]]
"""
number = str(number)
number_str = str(number)
replacements = []
digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

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

return replacements
Expand Down Expand Up @@ -106,6 +106,8 @@ def solution(family_length: int = 8) -> int:

return min(primes_in_family)

return -1


if __name__ == "__main__":
print(solution())
4 changes: 2 additions & 2 deletions project_euler/problem_074/sol2.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
counter increases.
"""

factorial_cache = {}
factorial_sum_cache = {}
factorial_cache: dict[int, int] = {}
factorial_sum_cache: dict[int, int] = {}


def factorial(a: int) -> int:
Expand Down
5 changes: 3 additions & 2 deletions project_euler/problem_080/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,13 @@ def solution() -> int:
sqrt_number = number.sqrt(decimal_context)
if len(str(sqrt_number)) > 1:
answer += int(str(sqrt_number)[0])
sqrt_number = str(sqrt_number)[2:101]
answer += sum(int(x) for x in sqrt_number)
sqrt_number_str = str(sqrt_number)[2:101]
answer += sum(int(x) for x in sqrt_number_str)
return answer


if __name__ == "__main__":
import doctest

doctest.testmod()
print(f"{solution() = }")
10 changes: 6 additions & 4 deletions project_euler/problem_099/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ def solution(data_file: str = "base_exp.txt") -> int:
>>> solution()
709
"""
largest = [0, 0]
largest: float = 0
result = 0
for i, line in enumerate(open(os.path.join(os.path.dirname(__file__), data_file))):
a, x = list(map(int, line.split(",")))
if x * log10(a) > largest[0]:
largest = [x * log10(a), i + 1]
return largest[1]
if x * log10(a) > largest:
largest = x * log10(a)
result = i + 1
return result


if __name__ == "__main__":
Expand Down
2 changes: 1 addition & 1 deletion project_euler/problem_101/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ def solution(func: Callable[[int], int] = question_function, order: int = 10) ->
]

ret: int = 0
poly: int
poly: Callable[[int], int]
x_val: int

for poly in polynomials:
Expand Down
4 changes: 2 additions & 2 deletions project_euler/problem_188/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"""


# small helper function for modular exponentiation
# small helper function for modular exponentiation (fast exponentiation algorithm)
def _modexpt(base: int, exponent: int, modulo_value: int) -> int:
"""
Returns the modular exponentiation, that is the value
Expand All @@ -36,7 +36,7 @@ def _modexpt(base: int, exponent: int, modulo_value: int) -> int:
if exponent == 1:
return base
if exponent % 2 == 0:
x = _modexpt(base, exponent / 2, modulo_value) % modulo_value
x = _modexpt(base, exponent // 2, modulo_value) % modulo_value
return (x * x) % modulo_value
else:
return (base * _modexpt(base, exponent - 1, modulo_value)) % modulo_value
Expand Down
2 changes: 1 addition & 1 deletion project_euler/problem_191/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"""


cache = {}
cache: dict[tuple[int, int, int], int] = {}


def _calculate(days: int, absent: int, late: int) -> int:
Expand Down
2 changes: 1 addition & 1 deletion project_euler/problem_207/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def solution(max_proportion: float = 1 / 12345) -> int:
perfect_partitions += 1
if perfect_partitions > 0:
if perfect_partitions / total_partitions < max_proportion:
return partition_candidate
return int(partition_candidate)
integer += 1


Expand Down
3 changes: 2 additions & 1 deletion project_euler/problem_551/sol1.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@
Find a(10^15)
"""


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


def next_term(a_i, k, i, n):
Expand Down

0 comments on commit bcfca67

Please sign in to comment.