mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 23:11:09 +00:00
c909da9b08
* pre-commit: Upgrade psf/black for stable style 2023 Updating https://github.com/psf/black ... updating 22.12.0 -> 23.1.0 for their `2023 stable style`. * https://github.com/psf/black/blob/main/CHANGES.md#2310 > This is the first [psf/black] release of 2023, and following our stability policy, it comes with a number of improvements to our stable style… Also, add https://github.com/tox-dev/pyproject-fmt and https://github.com/abravalheri/validate-pyproject to pre-commit. I only modified `.pre-commit-config.yaml` and all other files were modified by pre-commit.ci and psf/black. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
"""
|
|
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
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
|
|
def list_of_submasks(mask: int) -> list[int]:
|
|
"""
|
|
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]
|
|
>>> 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
|
|
|
|
"""
|
|
|
|
assert (
|
|
isinstance(mask, int) and mask > 0
|
|
), f"mask needs to be positive integer, your input {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()
|