aboutsummaryrefslogtreecommitdiff
path: root/todo/util/range.py
diff options
context:
space:
mode:
authorJoris2020-06-06 17:44:26 +0200
committerJoris2020-06-06 19:54:03 +0200
commit1595e0de940a86a7810df0e02e43838d97c0d846 (patch)
tree9701eeec0d98baa9f6044b1911df68e4c8539819 /todo/util/range.py
parent6b9195000eb5404c247288b384d7ca2bacc1ab23 (diff)
downloadtodo-1595e0de940a86a7810df0e02e43838d97c0d846.tar.gz
todo-1595e0de940a86a7810df0e02e43838d97c0d846.tar.bz2
todo-1595e0de940a86a7810df0e02e43838d97c0d846.zip
Provide nix build
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