blob: 9140895e40335d35b74abdeb47e9474306229fd4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#lang racket
(define (summary-ranges nums)
(define range-pairs
(cond
[(empty? nums) '()]
[(empty? (cdr nums)) (list (cons (car nums) (car nums)))]
[else (for/fold ([ranges '()]
[open-pair (first nums)]
[prev-num (first nums)]
#:result (append ranges (list (cons open-pair prev-num))))
([i (cdr nums)])
(cond [(= (add1 prev-num) i)
(values ranges
open-pair
i)]
[else
(values (append ranges (list (cons open-pair prev-num)))
i
i)]))]))
(for/list ([p (in-list range-pairs)])
(cond [(= (car p) (cdr p)) (format "~a" (car p))]
[else (format "~a->~a" (car p) (cdr p))])))
(summary-ranges '(0 1 2 4 5 7))
(summary-ranges '(0 2 3 4 6 8 9))
(summary-ranges '())
(summary-ranges '(0))
|