aboutsummaryrefslogtreecommitdiff
path: root/todo/util/range.py
diff options
context:
space:
mode:
Diffstat (limited to 'todo/util/range.py')
-rw-r--r--todo/util/range.py30
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