From 00351ca8992cc9b8a959274861a25d19123e81ba Mon Sep 17 00:00:00 2001 From: faizan2700 Date: Wed, 18 Dec 2019 10:27:19 +0530 Subject: [PATCH] iterating_through_submasks is added with doctests --- .../iterating_through_submasks.py | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/dynamic_programming/iterating_through_submasks.py b/dynamic_programming/iterating_through_submasks.py index 4957caeca..d855dbe47 100644 --- a/dynamic_programming/iterating_through_submasks.py +++ b/dynamic_programming/iterating_through_submasks.py @@ -1,10 +1,13 @@ -''' +""" +Author : Syed Faizan (3rd Year Student IIIT Pune) +github : faizan2700 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: + +def list_of_submasks(mask) -> list: """ Args: @@ -21,26 +24,36 @@ def list_of_submasks(mask)->list: [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] + >>> list_of_submasks(-7) # doctest: +ELLIPSIS + Traceback (most recent call last): + ... + AssertionError: mask needs to be positive integer, your input -7 + >>> list_of_submasks(0) # doctest: +ELLIPSIS + Traceback (most recent call last): + ... + AssertionError: mask needs to be positive integer, your input 0 """ 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 - + submask = (submask - 1) & mask + return all_submasks -if __name__ == '__main__': + +if __name__ == "__main__": import doctest + doctest.testmod()