1
1
from math import comb
2
2
from math import factorial
3
3
4
- def validate_elements_count (total_elements_count : int , selected_elements_count : int ) -> None :
5
- """ Validate that the number of elements are positive and the total is greater than or equal to selected. """
4
+
5
+ def validate_elements_count (
6
+ total_elements_count : int , selected_elements_count : int
7
+ ) -> None :
8
+ """Validate that the number of elements are positive and the total is greater than or equal to selected."""
6
9
if total_elements_count < selected_elements_count or selected_elements_count < 0 :
7
10
raise ValueError (
8
11
"Please enter positive integers for total_elements_count and selected_elements_count "
9
12
"where total_elements_count >= selected_elements_count"
10
13
)
11
14
12
15
13
- def combinations_iterative (total_elements_count : int , selected_elements_count : int ) -> int :
16
+ def combinations_iterative (
17
+ total_elements_count : int , selected_elements_count : int
18
+ ) -> int :
14
19
"""
15
20
Returns the number of combinations that can be made from a total set of elements.
16
21
@@ -33,12 +38,14 @@ def combinations_iterative(total_elements_count: int, selected_elements_count: i
33
38
validate_elements_count (total_elements_count , selected_elements_count )
34
39
combinations_count = 1
35
40
for i in range (selected_elements_count ):
36
- combinations_count *= ( total_elements_count - i )
37
- combinations_count //= ( i + 1 )
41
+ combinations_count *= total_elements_count - i
42
+ combinations_count //= i + 1
38
43
return combinations_count
39
44
40
45
41
- def multiset_combinations (total_elements_count : int , selected_elements_count : int ) -> int :
46
+ def multiset_combinations (
47
+ total_elements_count : int , selected_elements_count : int
48
+ ) -> int :
42
49
"""
43
50
Returns the number of combinations from a multiset of elements.
44
51
@@ -59,10 +66,14 @@ def multiset_combinations(total_elements_count: int, selected_elements_count: in
59
66
ValueError: n must be a non-negative integer
60
67
"""
61
68
validate_elements_count (total_elements_count , selected_elements_count )
62
- return comb (total_elements_count + selected_elements_count - 1 , selected_elements_count )
69
+ return comb (
70
+ total_elements_count + selected_elements_count - 1 , selected_elements_count
71
+ )
63
72
64
73
65
- def combinations_formula (total_elements_count : int , selected_elements_count : int ) -> int :
74
+ def combinations_formula (
75
+ total_elements_count : int , selected_elements_count : int
76
+ ) -> int :
66
77
"""
67
78
Calculate combinations using the formula for n choose k.
68
79
@@ -85,12 +96,14 @@ def combinations_formula(total_elements_count: int, selected_elements_count: int
85
96
validate_elements_count (total_elements_count , selected_elements_count )
86
97
remaining_elements_count = total_elements_count - selected_elements_count
87
98
return int (
88
- factorial (total_elements_count ) /
89
- (factorial (selected_elements_count ) * factorial (remaining_elements_count ))
99
+ factorial (total_elements_count )
100
+ / (factorial (selected_elements_count ) * factorial (remaining_elements_count ))
90
101
)
91
102
92
103
93
- def combinations_with_repetitions (total_elements_count : int , selected_elements_count : int ) -> int :
104
+ def combinations_with_repetitions (
105
+ total_elements_count : int , selected_elements_count : int
106
+ ) -> int :
94
107
"""
95
108
Calculate combinations with repetitions allowed.
96
109
@@ -114,8 +127,8 @@ def combinations_with_repetitions(total_elements_count: int, selected_elements_c
114
127
if total_elements_count + selected_elements_count == 0 :
115
128
return 1
116
129
return int (
117
- factorial (total_elements_count + selected_elements_count - 1 ) /
118
- (factorial (selected_elements_count ) * factorial (total_elements_count - 1 ))
130
+ factorial (total_elements_count + selected_elements_count - 1 )
131
+ / (factorial (selected_elements_count ) * factorial (total_elements_count - 1 ))
119
132
)
120
133
121
134
@@ -165,8 +178,8 @@ def possible_selections(total_elements_count: int, selected_elements_count: int)
165
178
ValueError: Please enter positive integers for total_elements_count and selected_elements_count where total_elements_count >= selected_elements_count
166
179
"""
167
180
validate_elements_count (total_elements_count , selected_elements_count )
168
- return int (total_elements_count ** selected_elements_count )
181
+ return int (total_elements_count ** selected_elements_count )
169
182
170
183
171
184
if __name__ == "__main__" :
172
- __import__ ("doctest" ).testmod ()
185
+ __import__ ("doctest" ).testmod ()
0 commit comments