diff options
Diffstat (limited to 'todo/util/range.py')
-rw-r--r-- | todo/util/range.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/todo/util/range.py b/todo/util/range.py new file mode 100644 index 0000000..bd4b27e --- /dev/null +++ b/todo/util/range.py @@ -0,0 +1,30 @@ +from typing import NamedTuple, List + +class Range(NamedTuple): + start: int + length: int + +def from_indexes(indexes: List[int]) -> List[Range]: + ranges = [] + curr_range_start = 0 + curr_range_len = 0 + + last_index = -1 + + for index in sorted(indexes): + if index == curr_range_start + curr_range_len: + curr_range_len += 1 + else: + if curr_range_len > 0: + ranges.append(Range( + start = curr_range_start, + length = curr_range_len)) + curr_range_start = index + curr_range_len = 1 + + if curr_range_len > 0: + ranges.append(Range( + start = curr_range_start, + length = curr_range_len)) + + return ranges |