mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-18 01:00:15 +00:00
maths/sum_of_digits.py: Streamline benchmarks (#7914)
* maths/sum_of_digits.py: Streamline benchmarks ``` sum_of_digits(262144): 19 -- 0.3128329170285724 seconds sum_of_digits_recursion(262144): 19 -- 0.34008108399575576 seconds sum_of_digits_compact(262144): 19 -- 0.6086010000435635 seconds sum_of_digits(1125899906842624): 76 -- 0.8079068749793805 seconds sum_of_digits_recursion(1125899906842624): 76 -- 0.8435653329943307 seconds sum_of_digits_compact(1125899906842624): 76 -- 1.247976207989268 seconds sum_of_digits(1267650600228229401496703205376): 115 -- 1.6441589999594726 seconds sum_of_digits_recursion(1267650600228229401496703205376): 115 -- 1.713684624992311 seconds sum_of_digits_compact(1267650600228229401496703205376): 115 -- 2.2197747920290567 seconds ``` * updating DIRECTORY.md * Update sum_of_digits.py * Update sum_of_digits.py Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
parent
7d139ee7f1
commit
d23e709aea
|
@ -1,10 +1,6 @@
|
||||||
from timeit import timeit
|
|
||||||
|
|
||||||
|
|
||||||
def sum_of_digits(n: int) -> int:
|
def sum_of_digits(n: int) -> int:
|
||||||
"""
|
"""
|
||||||
Find the sum of digits of a number.
|
Find the sum of digits of a number.
|
||||||
|
|
||||||
>>> sum_of_digits(12345)
|
>>> sum_of_digits(12345)
|
||||||
15
|
15
|
||||||
>>> sum_of_digits(123)
|
>>> sum_of_digits(123)
|
||||||
|
@ -25,7 +21,6 @@ def sum_of_digits(n: int) -> int:
|
||||||
def sum_of_digits_recursion(n: int) -> int:
|
def sum_of_digits_recursion(n: int) -> int:
|
||||||
"""
|
"""
|
||||||
Find the sum of digits of a number using recursion
|
Find the sum of digits of a number using recursion
|
||||||
|
|
||||||
>>> sum_of_digits_recursion(12345)
|
>>> sum_of_digits_recursion(12345)
|
||||||
15
|
15
|
||||||
>>> sum_of_digits_recursion(123)
|
>>> sum_of_digits_recursion(123)
|
||||||
|
@ -42,7 +37,6 @@ def sum_of_digits_recursion(n: int) -> int:
|
||||||
def sum_of_digits_compact(n: int) -> int:
|
def sum_of_digits_compact(n: int) -> int:
|
||||||
"""
|
"""
|
||||||
Find the sum of digits of a number
|
Find the sum of digits of a number
|
||||||
|
|
||||||
>>> sum_of_digits_compact(12345)
|
>>> sum_of_digits_compact(12345)
|
||||||
15
|
15
|
||||||
>>> sum_of_digits_compact(123)
|
>>> sum_of_digits_compact(123)
|
||||||
|
@ -57,93 +51,24 @@ def sum_of_digits_compact(n: int) -> int:
|
||||||
|
|
||||||
def benchmark() -> None:
|
def benchmark() -> None:
|
||||||
"""
|
"""
|
||||||
Benchmark code for comparing 3 functions,
|
Benchmark multiple functions, with three different length int values.
|
||||||
with 3 different length int values.
|
|
||||||
"""
|
"""
|
||||||
print("\nFor small_num = ", small_num, ":")
|
from collections.abc import Callable
|
||||||
print(
|
from timeit import timeit
|
||||||
"> sum_of_digits()",
|
|
||||||
"\t\tans =",
|
|
||||||
sum_of_digits(small_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits(z.small_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
print(
|
|
||||||
"> sum_of_digits_recursion()",
|
|
||||||
"\tans =",
|
|
||||||
sum_of_digits_recursion(small_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits_recursion(z.small_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
print(
|
|
||||||
"> sum_of_digits_compact()",
|
|
||||||
"\tans =",
|
|
||||||
sum_of_digits_compact(small_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits_compact(z.small_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
|
|
||||||
print("\nFor medium_num = ", medium_num, ":")
|
def benchmark_a_function(func: Callable, value: int) -> None:
|
||||||
print(
|
call = f"{func.__name__}({value})"
|
||||||
"> sum_of_digits()",
|
timing = timeit(f"__main__.{call}", setup="import __main__")
|
||||||
"\t\tans =",
|
print(f"{call:56} = {func(value)} -- {timing:.4f} seconds")
|
||||||
sum_of_digits(medium_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits(z.medium_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
print(
|
|
||||||
"> sum_of_digits_recursion()",
|
|
||||||
"\tans =",
|
|
||||||
sum_of_digits_recursion(medium_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits_recursion(z.medium_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
print(
|
|
||||||
"> sum_of_digits_compact()",
|
|
||||||
"\tans =",
|
|
||||||
sum_of_digits_compact(medium_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits_compact(z.medium_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
|
|
||||||
print("\nFor large_num = ", large_num, ":")
|
for value in (262144, 1125899906842624, 1267650600228229401496703205376):
|
||||||
print(
|
for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact):
|
||||||
"> sum_of_digits()",
|
benchmark_a_function(func, value)
|
||||||
"\t\tans =",
|
print()
|
||||||
sum_of_digits(large_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits(z.large_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
print(
|
|
||||||
"> sum_of_digits_recursion()",
|
|
||||||
"\tans =",
|
|
||||||
sum_of_digits_recursion(large_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits_recursion(z.large_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
print(
|
|
||||||
"> sum_of_digits_compact()",
|
|
||||||
"\tans =",
|
|
||||||
sum_of_digits_compact(large_num),
|
|
||||||
"\ttime =",
|
|
||||||
timeit("z.sum_of_digits_compact(z.large_num)", setup="import __main__ as z"),
|
|
||||||
"seconds",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
small_num = 262144
|
|
||||||
medium_num = 1125899906842624
|
|
||||||
large_num = 1267650600228229401496703205376
|
|
||||||
benchmark()
|
|
||||||
import doctest
|
import doctest
|
||||||
|
|
||||||
doctest.testmod()
|
doctest.testmod()
|
||||||
|
benchmark()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user