908.rkt 687 B

123456789101112131415161718192021222324252627282930313233
  1. #lang racket
  2. (define/contract (smallest-range-i nums k)
  3. (-> (listof exact-integer?) exact-integer? exact-integer?)
  4. (if (<= (length nums) 1) 0
  5. (let ([mi (apply min nums)]
  6. [ma (apply max nums)])
  7. (for*/fold
  8. ([c ma])
  9. ([i (in-range (+ k 1))]
  10. [j (in-range (+ k 1))])
  11. (min c (abs (- (- ma i) (+ mi j))))
  12. )
  13. )
  14. )
  15. )
  16. (define (main)
  17. (define (r l k e)
  18. (display
  19. (format
  20. "(smallest-range-i ~a ~a) = ~a | Exp: ~a\n"
  21. l k (smallest-range-i l k) e
  22. )
  23. )
  24. )
  25. (r '(1) 0 0)
  26. (r '(0 10) 2 6)
  27. (r '(1 3 6) 3 0)
  28. (r '(506 4763 8681 4243 4040 8587 9235 442 1865 2820) 5899 0)
  29. )
  30. (main)