|
@@ -0,0 +1,33 @@
|
|
|
|
|
+#lang racket
|
|
|
|
|
+
|
|
|
|
|
+(define/contract (smallest-range-i nums k)
|
|
|
|
|
+ (-> (listof exact-integer?) exact-integer? exact-integer?)
|
|
|
|
|
+ (if (<= (length nums) 1) 0
|
|
|
|
|
+ (let ([mi (apply min nums)]
|
|
|
|
|
+ [ma (apply max nums)])
|
|
|
|
|
+ (for*/fold
|
|
|
|
|
+ ([c ma])
|
|
|
|
|
+ ([i (in-range (+ k 1))]
|
|
|
|
|
+ [j (in-range (+ k 1))])
|
|
|
|
|
+ (min c (abs (- (- ma i) (+ mi j))))
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+(define (main)
|
|
|
|
|
+ (define (r l k e)
|
|
|
|
|
+ (display
|
|
|
|
|
+ (format
|
|
|
|
|
+ "(smallest-range-i ~a ~a) = ~a | Exp: ~a\n"
|
|
|
|
|
+ l k (smallest-range-i l k) e
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ (r '(1) 0 0)
|
|
|
|
|
+ (r '(0 10) 2 6)
|
|
|
|
|
+ (r '(1 3 6) 3 0)
|
|
|
|
|
+ (r '(506 4763 8681 4243 4040 8587 9235 442 1865 2820) 5899 0)
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+(main)
|