Skip to content

Commit d23e709

Browse files
cclaussgithub-actions
and
github-actions
authored
maths/sum_of_digits.py: Streamline benchmarks (TheAlgorithms#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>
1 parent 7d139ee commit d23e709

File tree

1 file changed

+12
-87
lines changed

1 file changed

+12
-87
lines changed

maths/sum_of_digits.py

+12-87
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
from timeit import timeit
2-
3-
41
def sum_of_digits(n: int) -> int:
52
"""
63
Find the sum of digits of a number.
7-
84
>>> sum_of_digits(12345)
95
15
106
>>> sum_of_digits(123)
@@ -25,7 +21,6 @@ def sum_of_digits(n: int) -> int:
2521
def sum_of_digits_recursion(n: int) -> int:
2622
"""
2723
Find the sum of digits of a number using recursion
28-
2924
>>> sum_of_digits_recursion(12345)
3025
15
3126
>>> sum_of_digits_recursion(123)
@@ -42,7 +37,6 @@ def sum_of_digits_recursion(n: int) -> int:
4237
def sum_of_digits_compact(n: int) -> int:
4338
"""
4439
Find the sum of digits of a number
45-
4640
>>> sum_of_digits_compact(12345)
4741
15
4842
>>> sum_of_digits_compact(123)
@@ -57,93 +51,24 @@ def sum_of_digits_compact(n: int) -> int:
5751

5852
def benchmark() -> None:
5953
"""
60-
Benchmark code for comparing 3 functions,
61-
with 3 different length int values.
54+
Benchmark multiple functions, with three different length int values.
6255
"""
63-
print("\nFor small_num = ", small_num, ":")
64-
print(
65-
"> sum_of_digits()",
66-
"\t\tans =",
67-
sum_of_digits(small_num),
68-
"\ttime =",
69-
timeit("z.sum_of_digits(z.small_num)", setup="import __main__ as z"),
70-
"seconds",
71-
)
72-
print(
73-
"> sum_of_digits_recursion()",
74-
"\tans =",
75-
sum_of_digits_recursion(small_num),
76-
"\ttime =",
77-
timeit("z.sum_of_digits_recursion(z.small_num)", setup="import __main__ as z"),
78-
"seconds",
79-
)
80-
print(
81-
"> sum_of_digits_compact()",
82-
"\tans =",
83-
sum_of_digits_compact(small_num),
84-
"\ttime =",
85-
timeit("z.sum_of_digits_compact(z.small_num)", setup="import __main__ as z"),
86-
"seconds",
87-
)
56+
from collections.abc import Callable
57+
from timeit import timeit
8858

89-
print("\nFor medium_num = ", medium_num, ":")
90-
print(
91-
"> sum_of_digits()",
92-
"\t\tans =",
93-
sum_of_digits(medium_num),
94-
"\ttime =",
95-
timeit("z.sum_of_digits(z.medium_num)", setup="import __main__ as z"),
96-
"seconds",
97-
)
98-
print(
99-
"> sum_of_digits_recursion()",
100-
"\tans =",
101-
sum_of_digits_recursion(medium_num),
102-
"\ttime =",
103-
timeit("z.sum_of_digits_recursion(z.medium_num)", setup="import __main__ as z"),
104-
"seconds",
105-
)
106-
print(
107-
"> sum_of_digits_compact()",
108-
"\tans =",
109-
sum_of_digits_compact(medium_num),
110-
"\ttime =",
111-
timeit("z.sum_of_digits_compact(z.medium_num)", setup="import __main__ as z"),
112-
"seconds",
113-
)
59+
def benchmark_a_function(func: Callable, value: int) -> None:
60+
call = f"{func.__name__}({value})"
61+
timing = timeit(f"__main__.{call}", setup="import __main__")
62+
print(f"{call:56} = {func(value)} -- {timing:.4f} seconds")
11463

115-
print("\nFor large_num = ", large_num, ":")
116-
print(
117-
"> sum_of_digits()",
118-
"\t\tans =",
119-
sum_of_digits(large_num),
120-
"\ttime =",
121-
timeit("z.sum_of_digits(z.large_num)", setup="import __main__ as z"),
122-
"seconds",
123-
)
124-
print(
125-
"> sum_of_digits_recursion()",
126-
"\tans =",
127-
sum_of_digits_recursion(large_num),
128-
"\ttime =",
129-
timeit("z.sum_of_digits_recursion(z.large_num)", setup="import __main__ as z"),
130-
"seconds",
131-
)
132-
print(
133-
"> sum_of_digits_compact()",
134-
"\tans =",
135-
sum_of_digits_compact(large_num),
136-
"\ttime =",
137-
timeit("z.sum_of_digits_compact(z.large_num)", setup="import __main__ as z"),
138-
"seconds",
139-
)
64+
for value in (262144, 1125899906842624, 1267650600228229401496703205376):
65+
for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact):
66+
benchmark_a_function(func, value)
67+
print()
14068

14169

14270
if __name__ == "__main__":
143-
small_num = 262144
144-
medium_num = 1125899906842624
145-
large_num = 1267650600228229401496703205376
146-
benchmark()
14771
import doctest
14872

14973
doctest.testmod()
74+
benchmark()

0 commit comments

Comments
 (0)