From 9a689b4127e0454ccd575dad72841b3695b79c43 Mon Sep 17 00:00:00 2001 From: Harsh Buddhdev Date: Tue, 10 Oct 2023 17:22:29 -0400 Subject: [PATCH 1/7] added doctest for all_permutations.py --- backtracking/all_permutations.py | 40 ++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/backtracking/all_permutations.py b/backtracking/all_permutations.py index ff8a53e0dd0e..169e7f81e9b5 100644 --- a/backtracking/all_permutations.py +++ b/backtracking/all_permutations.py @@ -6,7 +6,7 @@ where n denotes the length of the given sequence. """ from __future__ import annotations - +import doctest def generate_all_permutations(sequence: list[int | str]) -> None: create_state_space_tree(sequence, [], 0, [0 for i in range(len(sequence))]) @@ -22,6 +22,42 @@ def create_state_space_tree( Creates a state space tree to iterate through each branch using DFS. We know that each state has exactly len(sequence) - index children. It terminates when it reaches the end of the given sequence. + + :param sequence: The input sequence for which permutations are generated. + :param current_sequence: The current permutation being built. + :param index: The current index in the sequence. + :param index_used: A list to track which elements are used in the current permutation. + + Example 1: + >>> sequence = [1, 2, 3] + >>> current_sequence = [] + >>> index_used = [False, False, False] + >>> create_state_space_tree(sequence, current_sequence, 0, index_used) + [1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1] + + Example 2: + >>> sequence = ["A", "B", "C"] + >>> current_sequence = [] + >>> index_used = [False, False, False] + >>> create_state_space_tree(sequence, current_sequence, 0, index_used) + ['A', 'B', 'C'] + ['A', 'C', 'B'] + ['B', 'A', 'C'] + ['B', 'C', 'A'] + ['C', 'A', 'B'] + ['C', 'B', 'A'] + + Example 3: + >>> sequence = [1] + >>> current_sequence = [] + >>> index_used = [False] + >>> create_state_space_tree(sequence, current_sequence, 0, index_used) + [1] """ if index == len(sequence): @@ -38,7 +74,7 @@ def create_state_space_tree( """ -remove the comment to take an input from the user +remove the comment to take an input from the user print("Enter the elements") sequence = list(map(int, input().split())) From 8f1ca58bc55c5905c5851dc32419e9377579e5c5 Mon Sep 17 00:00:00 2001 From: Harsh Buddhdev Date: Tue, 10 Oct 2023 17:36:42 -0400 Subject: [PATCH 2/7] added doctest for all_subsequences.py --- backtracking/all_subsequences.py | 65 ++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/backtracking/all_subsequences.py b/backtracking/all_subsequences.py index c465fc542407..7598b8ffc1eb 100644 --- a/backtracking/all_subsequences.py +++ b/backtracking/all_subsequences.py @@ -6,7 +6,7 @@ where n denotes the length of the given sequence. """ from __future__ import annotations - +import doctest from typing import Any @@ -21,6 +21,56 @@ def create_state_space_tree( Creates a state space tree to iterate through each branch using DFS. We know that each state has exactly two children. It terminates when it reaches the end of the given sequence. + + :param sequence: The input sequence for which subsequences are generated. + :param current_subsequence: The current subsequence being built. + :param index: The current index in the sequence. + + Example: + >>> sequence = [3, 2, 1] + >>> current_subsequence = [] + >>> create_state_space_tree(sequence, current_subsequence, 0) + [] + [1] + [2] + [2, 1] + [3] + [3, 1] + [3, 2] + [3, 2, 1] + + >>> sequence = ["A", "B"] + >>> current_subsequence = [] + >>> create_state_space_tree(sequence, current_subsequence, 0) + [] + ['B'] + ['A'] + ['A', 'B'] + + >>> sequence = [] + >>> current_subsequence = [] + >>> create_state_space_tree(sequence, current_subsequence, 0) + [] + + >>> sequence = [1, 2, 3, 4] + >>> current_subsequence = [] + >>> create_state_space_tree(sequence, current_subsequence, 0) + [] + [4] + [3] + [3, 4] + [2] + [2, 4] + [2, 3] + [2, 3, 4] + [1] + [1, 4] + [1, 3] + [1, 3, 4] + [1, 2] + [1, 2, 4] + [1, 2, 3] + [1, 2, 3, 4] """ if index == len(sequence): @@ -32,11 +82,12 @@ def create_state_space_tree( create_state_space_tree(sequence, current_subsequence, index + 1) current_subsequence.pop() +doctest.testmod() -if __name__ == "__main__": - seq: list[Any] = [3, 1, 2, 4] - generate_all_subsequences(seq) +# if __name__ == "__main__": +# seq: list[Any] = [1, 2, 3] +# generate_all_subsequences(seq) - seq.clear() - seq.extend(["A", "B", "C"]) - generate_all_subsequences(seq) +# seq.clear() +# seq.extend(["A", "B", "C"]) +# generate_all_subsequences(seq) From bdbb286870f026ff49d5831b737590ba7569a7b4 Mon Sep 17 00:00:00 2001 From: Harsh Buddhdev Date: Tue, 10 Oct 2023 18:08:29 -0400 Subject: [PATCH 3/7] added doctest for all_subsequences.py --- backtracking/all_subsequences.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/backtracking/all_subsequences.py b/backtracking/all_subsequences.py index 7598b8ffc1eb..74fafb2ac779 100644 --- a/backtracking/all_subsequences.py +++ b/backtracking/all_subsequences.py @@ -82,12 +82,11 @@ def create_state_space_tree( create_state_space_tree(sequence, current_subsequence, index + 1) current_subsequence.pop() -doctest.testmod() -# if __name__ == "__main__": -# seq: list[Any] = [1, 2, 3] -# generate_all_subsequences(seq) +if __name__ == "__main__": + seq: list[Any] = [1, 2, 3] + generate_all_subsequences(seq) -# seq.clear() -# seq.extend(["A", "B", "C"]) -# generate_all_subsequences(seq) + seq.clear() + seq.extend(["A", "B", "C"]) + generate_all_subsequences(seq) From 363235c284e53b7a7b4d36f6ce30d1e3d44a160c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 22:10:38 +0000 Subject: [PATCH 4/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/all_permutations.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backtracking/all_permutations.py b/backtracking/all_permutations.py index 169e7f81e9b5..c0c0c8ff43db 100644 --- a/backtracking/all_permutations.py +++ b/backtracking/all_permutations.py @@ -8,6 +8,7 @@ from __future__ import annotations import doctest + def generate_all_permutations(sequence: list[int | str]) -> None: create_state_space_tree(sequence, [], 0, [0 for i in range(len(sequence))]) @@ -74,7 +75,7 @@ def create_state_space_tree( """ -remove the comment to take an input from the user +remove the comment to take an input from the user print("Enter the elements") sequence = list(map(int, input().split())) From 6111bc424fa24b8177bbdc0b3050eefc0ff25711 Mon Sep 17 00:00:00 2001 From: Harsh Buddhdev Date: Tue, 10 Oct 2023 22:00:39 -0400 Subject: [PATCH 5/7] doctest added --- backtracking/all_permutations.py | 1 - backtracking/all_subsequences.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/backtracking/all_permutations.py b/backtracking/all_permutations.py index c0c0c8ff43db..7c12048850bf 100644 --- a/backtracking/all_permutations.py +++ b/backtracking/all_permutations.py @@ -6,7 +6,6 @@ where n denotes the length of the given sequence. """ from __future__ import annotations -import doctest def generate_all_permutations(sequence: list[int | str]) -> None: diff --git a/backtracking/all_subsequences.py b/backtracking/all_subsequences.py index 74fafb2ac779..4d1ee0d4e8ef 100644 --- a/backtracking/all_subsequences.py +++ b/backtracking/all_subsequences.py @@ -6,7 +6,7 @@ where n denotes the length of the given sequence. """ from __future__ import annotations -import doctest + from typing import Any From dc6dff45ab18c750f761d09e3a0e283b49b7687d Mon Sep 17 00:00:00 2001 From: Harsh Buddhdev Date: Tue, 10 Oct 2023 22:03:00 -0400 Subject: [PATCH 6/7] updated --- backtracking/all_permutations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backtracking/all_permutations.py b/backtracking/all_permutations.py index 7c12048850bf..1e51d708acd7 100644 --- a/backtracking/all_permutations.py +++ b/backtracking/all_permutations.py @@ -26,7 +26,7 @@ def create_state_space_tree( :param sequence: The input sequence for which permutations are generated. :param current_sequence: The current permutation being built. :param index: The current index in the sequence. - :param index_used: A list to track which elements are used in the current permutation. + :param index_used: list to track which elements are used in permutation. Example 1: >>> sequence = [1, 2, 3] From 397525ab1f49a72644c4bdd432cc574652473b45 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 2 Jun 2024 19:56:25 -0700 Subject: [PATCH 7/7] Update backtracking/all_subsequences.py --- backtracking/all_subsequences.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backtracking/all_subsequences.py b/backtracking/all_subsequences.py index 4d1ee0d4e8ef..a66957342d47 100644 --- a/backtracking/all_subsequences.py +++ b/backtracking/all_subsequences.py @@ -22,7 +22,7 @@ def create_state_space_tree( We know that each state has exactly two children. It terminates when it reaches the end of the given sequence. - :param sequence: The input sequence for which subsequences are generated. + :param sequence: The input sequence for which subsequences are generated. :param current_subsequence: The current subsequence being built. :param index: The current index in the sequence.