From a0d473a5fefc3330bbd6ea8cba10a7bc1a33286d Mon Sep 17 00:00:00 2001 From: Salman Siddiq Date: Sat, 7 Oct 2023 21:02:42 +0500 Subject: [PATCH 1/6] added doctests --- dynamic_programming/minimum_partition.py | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/dynamic_programming/minimum_partition.py b/dynamic_programming/minimum_partition.py index 3daa9767fde4..dcb4d7ac3eba 100644 --- a/dynamic_programming/minimum_partition.py +++ b/dynamic_programming/minimum_partition.py @@ -1,9 +1,36 @@ + + """ Partition a set into two subsets such that the difference of subset sums is minimum """ def find_min(arr): + """ + >>> find_min([1]) + 1 + >>> find_min([1,2,3,4]) + 0 + >>> find_min([0,0,0,0]) + 0 + >>> find_min([-1,-5,5,1]) + 0 + >>> find_min([0,0,0,1,2,-4]) + -1 + >>> find_min([9,9,9,9,9]) + 9 + >>> find_min([]) + 0 + >>> find_min([0,0,0,0]) + 0 + >>> find_min([-1,-5,-10,-3]) + -1 + >>> find_min([1,5,10,3]) + 1 + >>> find_min([-1,0,1]) + 0 + + """ n = len(arr) s = sum(arr) From ea3d9aeacb5d749c8cddde1be8c98a62f2fa3349 Mon Sep 17 00:00:00 2001 From: Salman Siddiq Date: Sat, 7 Oct 2023 21:13:40 +0500 Subject: [PATCH 2/6] added doctests --- dynamic_programming/minimum_partition.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dynamic_programming/minimum_partition.py b/dynamic_programming/minimum_partition.py index dcb4d7ac3eba..13a925242e9c 100644 --- a/dynamic_programming/minimum_partition.py +++ b/dynamic_programming/minimum_partition.py @@ -7,8 +7,7 @@ def find_min(arr): """ - >>> find_min([1]) - 1 + >>> find_min([1,2,3,4]) 0 >>> find_min([0,0,0,0]) From faf8f66d13ded8114e02bb9b4af95de48e8053c5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 7 Oct 2023 16:26:41 +0000 Subject: [PATCH 3/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dynamic_programming/minimum_partition.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/dynamic_programming/minimum_partition.py b/dynamic_programming/minimum_partition.py index 13a925242e9c..c576f543a3f6 100644 --- a/dynamic_programming/minimum_partition.py +++ b/dynamic_programming/minimum_partition.py @@ -1,5 +1,3 @@ - - """ Partition a set into two subsets such that the difference of subset sums is minimum """ From 8bca5352751fad55daa08d5f1d35795d9676db08 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Fri, 13 Oct 2023 19:13:48 +0200 Subject: [PATCH 4/6] Add doctests to integer_partition.py --- dynamic_programming/integer_partition.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dynamic_programming/integer_partition.py b/dynamic_programming/integer_partition.py index 8ed2e51bd4bd..c9b39c3b4ded 100644 --- a/dynamic_programming/integer_partition.py +++ b/dynamic_programming/integer_partition.py @@ -3,10 +3,34 @@ partitions into exactly k parts plus the number of partitions into at least k-1 parts. Subtracting 1 from each part of a partition of n into k parts gives a partition of n-k into k parts. These two facts together are used for this algorithm. +* https://en.wikipedia.org/wiki/Partition_(number_theory) +* https://en.wikipedia.org/wiki/Partition_function_(number_theory) """ def partition(m: int) -> int: + """ + >>> partition(5) + 5 + >>> partition(7) + 15 + >>> partition(100) + 190569292 + >>> partition(1_000) + 24061467864032622473692149727991 + >>> partition(-7) + Traceback (most recent call last): + ... + IndexError: list index out of range + >>> partition(0) + Traceback (most recent call last): + ... + IndexError: list assignment index out of range + >>> partition(7.8) + Traceback (most recent call last): + ... + TypeError: 'float' object cannot be interpreted as an integer + """ memo: list[list[int]] = [[0 for _ in range(m)] for _ in range(m + 1)] for i in range(m + 1): memo[i][0] = 1 From b3df8bba500dcad5b5c8a0d228a5d00151b9f7ab Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Fri, 13 Oct 2023 19:29:45 +0200 Subject: [PATCH 5/6] Update minimum_partition.py --- dynamic_programming/minimum_partition.py | 48 +++++++++++++----------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/dynamic_programming/minimum_partition.py b/dynamic_programming/minimum_partition.py index c576f543a3f6..1b2e2708608a 100644 --- a/dynamic_programming/minimum_partition.py +++ b/dynamic_programming/minimum_partition.py @@ -3,33 +3,39 @@ """ -def find_min(arr): +def find_min(numbers: list[int]) -> int: """ - - >>> find_min([1,2,3,4]) - 0 - >>> find_min([0,0,0,0]) + >>> find_min([1, 2, 3, 4]) 0 - >>> find_min([-1,-5,5,1]) + >>> find_min([0, 0, 0, 0]) 0 - >>> find_min([0,0,0,1,2,-4]) - -1 - >>> find_min([9,9,9,9,9]) - 9 - >>> find_min([]) + >>> find_min([-1, -5, 5, 1]) 0 - >>> find_min([0,0,0,0]) + >>> find_min([-1, -5, 5, 1]) 0 - >>> find_min([-1,-5,-10,-3]) - -1 - >>> find_min([1,5,10,3]) + >>> find_min([9, 9, 9, 9, 9]) + 1 + >>> find_min([1, 5, 10, 3]) 1 - >>> find_min([-1,0,1]) + >>> find_min([-1, 0, 1]) 0 - + >>> find_min(range(10, 0, -1)) + 1 + >>> find_min([0, 0, 0, 1, 2, -4]) + Traceback (most recent call last): + ... + IndexError: list assignment index out of range + >>> find_min([]) + Traceback (most recent call last): + ... + UnboundLocalError: cannot access local variable 'diff' where it is not associated with a value + >>> find_min([-1, -5, -10, -3]) + Traceback (most recent call last): + ... + IndexError: list assignment index out of range """ - n = len(arr) - s = sum(arr) + n = len(numbers) + s = sum(numbers) dp = [[False for x in range(s + 1)] for y in range(n + 1)] @@ -43,8 +49,8 @@ def find_min(arr): for j in range(1, s + 1): dp[i][j] = dp[i][j - 1] - if arr[i - 1] <= j: - dp[i][j] = dp[i][j] or dp[i - 1][j - arr[i - 1]] + if numbers[i - 1] <= j: + dp[i][j] = dp[i][j] or dp[i - 1][j - numbers[i - 1]] for j in range(int(s / 2), -1, -1): if dp[n][j] is True: From 3cf147a3c570e49a314e46429692c980d25216e5 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Fri, 13 Oct 2023 19:45:22 +0200 Subject: [PATCH 6/6] Update integer_partition.py --- dynamic_programming/integer_partition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dynamic_programming/integer_partition.py b/dynamic_programming/integer_partition.py index c9b39c3b4ded..145bc29d0fca 100644 --- a/dynamic_programming/integer_partition.py +++ b/dynamic_programming/integer_partition.py @@ -11,7 +11,7 @@ def partition(m: int) -> int: """ >>> partition(5) - 5 + 7 >>> partition(7) 15 >>> partition(100)