Skip to content

Changes the code To return the list in dynamic_programming/subset_generation.py #10191

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Changes from 2 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
dde13de
Changing the code to return tuple
AasheeshLikePanner Oct 9, 2023
0a24286
Changing the code to return tuple
AasheeshLikePanner Oct 9, 2023
78699e6
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 9, 2023
2428546
Update dynamic_programming/subset_generation.py
AasheeshLikePanner Oct 15, 2023
80bd835
Adding doctests in subset_generation.py
AasheeshLikePanner Oct 15, 2023
0ea1892
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner Oct 15, 2023
f79c742
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 15, 2023
29f67cf
Update subset_generation.py
AasheeshLikePanner Oct 15, 2023
2950699
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner Oct 15, 2023
2a9f506
Update subset_generation.py
AasheeshLikePanner Oct 15, 2023
3d8fe15
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 15, 2023
9ea41a3
Update subset_generation.py
AasheeshLikePanner Oct 15, 2023
7615e52
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner Oct 15, 2023
314541d
Update subset_generation.py
AasheeshLikePanner Oct 15, 2023
bc02834
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 15, 2023
c455a31
Update dynamic_programming/subset_generation.py
AasheeshLikePanner Oct 15, 2023
9088b31
Update stock_span_problem.py
AasheeshLikePanner Oct 15, 2023
916b533
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner Oct 15, 2023
5aa6f60
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 15, 2023
1669f13
Update subset_generation.py
AasheeshLikePanner Oct 15, 2023
1abe2f3
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner Oct 15, 2023
bb18a8e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 15, 2023
3385a1e
Update subset_generation.py
AasheeshLikePanner Oct 15, 2023
392de54
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner Oct 15, 2023
0116388
Update subset_generation.py
AasheeshLikePanner Oct 15, 2023
afd8d56
Update subset_generation.py
cclauss Oct 15, 2023
a746cd6
Update subset_generation.py
cclauss Oct 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion dynamic_programming/subset_generation.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,33 @@
# return all subset combinations of n element in given set of r element.


def subset_combinations_dp(elements, n):
def subset_combinations_dp(elements: list, n: int) -> list:
"""
Generate all possible combinations of n elements from the given list of elements using dynamic programming.
Args:
elements (list): The list of elements from which combinations will be generated.
n (int): The number of elements in each combination.
Returns:
list: A list of tuples, each representing a combination of n elements.
>>> subset_combinations_dp(elements=[10, 20, 30, 40], n=2)
[(10, 20), (10, 30), (20, 30), (10, 40), (20, 40), (30, 40)]
>>> subset_combinations_dp(elements=[1, 2, 3], n=1)
[(1,), (2,), (3,)]
>>> subset_combinations_dp(elements=[1, 2, 3], n=3)
[(1, 2, 3)]
>>> subset_combinations_dp(elements=[42], n=1)
[(42,)]
>>> subset_combinations_dp(elements=[1, 2, 3, 4, 5], n=3)
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 5), (1, 3, 5), (2, 3, 5), (1, 4, 5), (2, 4, 5), (3, 4, 5)]
>>> subset_combinations_dp(elements=[6, 7, 8, 9], n=4)
[(6, 7, 8, 9)]
>>> subset_combinations_dp(elements=[10, 20, 30, 40, 50], n=0)
[()]
>>> subset_combinations_dp(elements=[1, 'apple', 3.14], n=2)
[(1, 'apple'), (1, 3.14), ('apple', 3.14)]
>>> subset_combinations_dp(elements=['single'], n=0)
[()]
"""
r = len(elements)

dp = [[] for _ in range(r + 1)]
Expand All @@ -20,3 +46,7 @@ def subset_combinations_dp(elements, n):

if __name__ == "__main__":
print(f"{subset_combinations_dp(elements=[10, 20, 30, 40], n=2) = }")
Copy link
Member

@cclauss cclauss Oct 15, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

subset_combinations_dp() should work the same way as itertools.combinations(). It should present the same sort order and raise the same exceptions.

Suggested change
print(f"{subset_combinations_dp(elements=[10, 20, 30, 40], n=2) = }")
from itertools import combinations
for items, n in (
([10, 20, 30, 40], 2), ([1, 2, 3], 1), ([1, 2, 3], 3), ([42], 1),
([6, 7, 8, 9], 4), ([10, 20, 30, 40, 50], 1), ([1, 2, 3, 4], 2),
([1, 'apple', 3.14], 2), (['single'], 0), ([], 9)
):
actual = subset_combinations_dp(items, n)
expected = list(combinations(items, n))
assert actual == expected, f"items, n: {actual} != {expected}"
print(f"{subset_combinations_dp(elements=[10, 20, 30, 40], n=2) = }")

Copy link
Contributor Author

@AasheeshLikePanner AasheeshLikePanner Oct 15, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have changed the code now code giving the list sorted order

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

itertools.combinations([1, 'apple', 3.14], 2)


import doctest

doctest.testmod()