diff options
Diffstat (limited to 'src/utils/iterator.ts')
-rw-r--r-- | src/utils/iterator.ts | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/utils/iterator.ts b/src/utils/iterator.ts index fa58fc9..43437b6 100644 --- a/src/utils/iterator.ts +++ b/src/utils/iterator.ts @@ -50,3 +50,30 @@ export async function findMapAsync<T, R>( return await tryNext(0); } + +export function createRanges(nums: Iterable<number>): string[] { + const ns = new Set(nums).values().toArray().sort(( + a, + b, + ) => a - b); + + const result = []; + let start = ns[0]; + let end = ns[0]; + + for (let i = 1; i <= ns.length; i++) { + if (ns[i] === end + 1) { + end = ns[i]; + } else { + if (start === end) { + result.push(`${start}`); + } else { + result.push(`${start}-${end}`); + } + start = ns[i]; + end = ns[i]; + } + } + + return result; +} |