ChunkRange = T.Tuple[int, int]
def get_chunks(num_ranges: int,
➊
length: int) -> T.Iterator[ChunkRange]:
max_number = int(math.pow(10, length) - 1)
chunk_starts = [int(max_number / num_ranges * i)
for i in range(num_ranges)]
chunk_ends = [start_point – 1
for start_point in
chunk_starts[1:]] + [max_number]
return zip(chunk_starts, chunk_ends)
def crack_password_parallel(crypto_hash: str, length: int) -> None:
➋
num_cores = cpu_count()
chunks = get_chunks(num_cores, length)