aboutsummaryrefslogtreecommitdiff
path: root/racket/leetcode/lc-228-summary-ranges.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'racket/leetcode/lc-228-summary-ranges.rkt')
-rw-r--r--racket/leetcode/lc-228-summary-ranges.rkt27
1 files changed, 27 insertions, 0 deletions
diff --git a/racket/leetcode/lc-228-summary-ranges.rkt b/racket/leetcode/lc-228-summary-ranges.rkt
new file mode 100644
index 0000000..9140895
--- /dev/null
+++ b/racket/leetcode/lc-228-summary-ranges.rkt
@@ -0,0 +1,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)) \ No newline at end of file