Skip to content

Commit b55c7ad

Browse files
cclaussgithub-actionspre-commit-ci[bot]
authored andcommitted
maths/number_of_digits.py: Streamline benchmarks (TheAlgorithms#7913)
* maths/number_of_digits.py: Streamline benchmarks ``` num_digits(262144): 6 -- 0.2226011250168085 seconds num_digits_fast(262144): 6 -- 0.13145116699161008 seconds num_digits_faster(262144): 6 -- 0.09273383300751448 seconds num_digits(1125899906842624): 16 -- 0.6056742920191027 seconds num_digits_fast(1125899906842624): 16 -- 0.15698366600554436 seconds num_digits_faster(1125899906842624): 16 -- 0.1027024170034565 seconds num_digits(1267650600228229401496703205376): 31 -- 1.1957934170495719 seconds num_digits_fast(1267650600228229401496703205376): 31 -- 0.15552304196171463 seconds num_digits_faster(1267650600228229401496703205376): 31 -- 0.13062308297958225 seconds ``` * updating DIRECTORY.md * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update number_of_digits.py Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent fffd8f1 commit b55c7ad

File tree

1 file changed

+13
-83
lines changed

1 file changed

+13
-83
lines changed

Diff for: maths/number_of_digits.py

+13-83
Original file line numberDiff line numberDiff line change
@@ -67,93 +67,23 @@ def num_digits_faster(n: int) -> int:
6767

6868
def benchmark() -> None:
6969
"""
70-
Benchmark code for comparing 3 functions,
71-
with 3 different length int values.
70+
Benchmark multiple functions, with three different length int values.
7271
"""
73-
print("\nFor small_num = ", small_num, ":")
74-
print(
75-
"> num_digits()",
76-
"\t\tans =",
77-
num_digits(small_num),
78-
"\ttime =",
79-
timeit("z.num_digits(z.small_num)", setup="import __main__ as z"),
80-
"seconds",
81-
)
82-
print(
83-
"> num_digits_fast()",
84-
"\tans =",
85-
num_digits_fast(small_num),
86-
"\ttime =",
87-
timeit("z.num_digits_fast(z.small_num)", setup="import __main__ as z"),
88-
"seconds",
89-
)
90-
print(
91-
"> num_digits_faster()",
92-
"\tans =",
93-
num_digits_faster(small_num),
94-
"\ttime =",
95-
timeit("z.num_digits_faster(z.small_num)", setup="import __main__ as z"),
96-
"seconds",
97-
)
98-
99-
print("\nFor medium_num = ", medium_num, ":")
100-
print(
101-
"> num_digits()",
102-
"\t\tans =",
103-
num_digits(medium_num),
104-
"\ttime =",
105-
timeit("z.num_digits(z.medium_num)", setup="import __main__ as z"),
106-
"seconds",
107-
)
108-
print(
109-
"> num_digits_fast()",
110-
"\tans =",
111-
num_digits_fast(medium_num),
112-
"\ttime =",
113-
timeit("z.num_digits_fast(z.medium_num)", setup="import __main__ as z"),
114-
"seconds",
115-
)
116-
print(
117-
"> num_digits_faster()",
118-
"\tans =",
119-
num_digits_faster(medium_num),
120-
"\ttime =",
121-
timeit("z.num_digits_faster(z.medium_num)", setup="import __main__ as z"),
122-
"seconds",
123-
)
124-
125-
print("\nFor large_num = ", large_num, ":")
126-
print(
127-
"> num_digits()",
128-
"\t\tans =",
129-
num_digits(large_num),
130-
"\ttime =",
131-
timeit("z.num_digits(z.large_num)", setup="import __main__ as z"),
132-
"seconds",
133-
)
134-
print(
135-
"> num_digits_fast()",
136-
"\tans =",
137-
num_digits_fast(large_num),
138-
"\ttime =",
139-
timeit("z.num_digits_fast(z.large_num)", setup="import __main__ as z"),
140-
"seconds",
141-
)
142-
print(
143-
"> num_digits_faster()",
144-
"\tans =",
145-
num_digits_faster(large_num),
146-
"\ttime =",
147-
timeit("z.num_digits_faster(z.large_num)", setup="import __main__ as z"),
148-
"seconds",
149-
)
72+
from collections.abc import Callable
73+
74+
def benchmark_a_function(func: Callable, value: int) -> None:
75+
call = f"{func.__name__}({value})"
76+
timing = timeit(f"__main__.{call}", setup="import __main__")
77+
print(f"{call}: {func(value)} -- {timing} seconds")
78+
79+
for value in (262144, 1125899906842624, 1267650600228229401496703205376):
80+
for func in (num_digits, num_digits_fast, num_digits_faster):
81+
benchmark_a_function(func, value)
82+
print()
15083

15184

15285
if __name__ == "__main__":
153-
small_num = 262144
154-
medium_num = 1125899906842624
155-
large_num = 1267650600228229401496703205376
156-
benchmark()
15786
import doctest
15887

15988
doctest.testmod()
89+
benchmark()

0 commit comments

Comments
 (0)