aboutsummaryrefslogtreecommitdiff
path: root/racket/leetcode/lc-228-summary-ranges.rkt
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))