mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +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:
|
||||
"""
|
||||
Find the sum of digits of a number.
|
||||
|
||||
>>> sum_of_digits(12345)
|
||||
15
|
||||
>>> sum_of_digits(123)
|
||||
|
@ -25,7 +21,6 @@ def sum_of_digits(n: int) -> int:
|
|||
def sum_of_digits_recursion(n: int) -> int:
|
||||
"""
|
||||
Find the sum of digits of a number using recursion
|
||||
|
||||
>>> sum_of_digits_recursion(12345)
|
||||
15
|
||||
>>> 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:
|
||||
"""
|
||||
Find the sum of digits of a number
|
||||
|
||||
>>> sum_of_digits_compact(12345)
|
||||
15
|
||||
>>> sum_of_digits_compact(123)
|
||||
|
@ -57,93 +51,24 @@ def sum_of_digits_compact(n: int) -> int:
|
|||
|
||||
def benchmark() -> None:
|
||||
"""
|
||||
Benchmark code for comparing 3 functions,
|
||||
with 3 different length int values.
|
||||
Benchmark multiple functions, with three different length int values.
|
||||
"""
|
||||
print("\nFor small_num = ", small_num, ":")
|
||||
print(
|
||||
"> 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",
|
||||
)
|
||||
from collections.abc import Callable
|
||||
from timeit import timeit
|
||||
|
||||
print("\nFor medium_num = ", medium_num, ":")
|
||||
print(
|
||||
"> sum_of_digits()",
|
||||
"\t\tans =",
|
||||
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",
|
||||
)
|
||||
def benchmark_a_function(func: Callable, value: int) -> None:
|
||||
call = f"{func.__name__}({value})"
|
||||
timing = timeit(f"__main__.{call}", setup="import __main__")
|
||||
print(f"{call:56} = {func(value)} -- {timing:.4f} seconds")
|
||||
|
||||
print("\nFor large_num = ", large_num, ":")
|
||||
print(
|
||||
"> sum_of_digits()",
|
||||
"\t\tans =",
|
||||
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",
|
||||
)
|
||||
for value in (262144, 1125899906842624, 1267650600228229401496703205376):
|
||||
for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact):
|
||||
benchmark_a_function(func, value)
|
||||
print()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
small_num = 262144
|
||||
medium_num = 1125899906842624
|
||||
large_num = 1267650600228229401496703205376
|
||||
benchmark()
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
||||
benchmark()
|
||||
|
|
Loading…
Reference in New Issue
Block a user