#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)