From 01121afa65ed6a175a3e976515ed604e90a1623f Mon Sep 17 00:00:00 2001 From: faizan2700 Date: Tue, 17 Dec 2019 22:44:44 +0530 Subject: [PATCH] new file *iterating_through_submasks* is added in dynamic_programming section --- .../iterating_through_submasks.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 dynamic_programming/iterating_through_submasks.py diff --git a/dynamic_programming/iterating_through_submasks.py b/dynamic_programming/iterating_through_submasks.py new file mode 100644 index 000000000..4957caeca --- /dev/null +++ b/dynamic_programming/iterating_through_submasks.py @@ -0,0 +1,46 @@ +''' +You are given a bitmask m and you want to efficiently iterate through all of +its submasks. The mask s is submask of m if only bits that were included in +bitmask are set +''' + +def list_of_submasks(mask)->list: + + """ + Args: + mask : number which shows mask ( always integer > 0, zero does not have any submasks ) + + Returns: + all_submasks : the list of submasks of mask (mask s is called submask of mask + m if only bits that were included in original mask are set + + Raises: + AssertionError: mask not positive integer + + >>> list_of_submasks(15) + [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1] + >>> list_of_submasks(13) + [13, 12, 9, 8, 5, 4, 1] + + """ + + fmt = "n needs to be positive integer, your input {}" + assert isinstance(mask, int) and mask > 0, fmt.format(mask) + + ''' + first submask iterated will be mask itself then operation will be performed + to get other submasks till we reach empty submask that is zero ( zero is not + included in final submasks list ) + ''' + all_submasks = [] + submask = mask + + while submask: + all_submasks.append(submask) + submask = (submask-1) & mask + + return all_submasks + +if __name__ == '__main__': + import doctest + doctest.testmod()