|
@@ -0,0 +1,44 @@
|
|
|
|
|
+#lang racket
|
|
|
|
|
+
|
|
|
|
|
+(define/contract (minimum-sum nums)
|
|
|
|
|
+ (-> (listof exact-integer?) exact-integer?)
|
|
|
|
|
+ (let ([nums_size (length nums)])
|
|
|
|
|
+ (if (< nums_size 3)
|
|
|
|
|
+ -1
|
|
|
|
|
+ (let _go ([m 153] [f nums] [s (cdr nums)] [t (cddr nums)])
|
|
|
|
|
+ ;(printf "m(~a) f(~a) s(~a) t(~a)\n" m f s t)
|
|
|
|
|
+ (if (< (length f) 3)
|
|
|
|
|
+ (if (= m 153) -1 m)
|
|
|
|
|
+ (if (< (length s) 2)
|
|
|
|
|
+ (_go m (cdr f) (cddr f) (cdddr f))
|
|
|
|
|
+ (if (pair? t)
|
|
|
|
|
+ (let* ([fv (car f)] [sv (car s)] [tv (car t)])
|
|
|
|
|
+ (if (and (< fv sv) (> sv tv))
|
|
|
|
|
+ (_go (min (+ fv sv tv) m) f s (cdr t))
|
|
|
|
|
+ (_go m f s (cdr t))
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ (_go m f (cdr s) (cddr s))
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+(define (main)
|
|
|
|
|
+ (define (r nums exp)
|
|
|
|
|
+ (printf
|
|
|
|
|
+ "(minimum-sum ~a) = ~a | Exp: ~a\n"
|
|
|
|
|
+ nums (minimum-sum nums) exp
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ (r '(8 6 1 5 3) 9)
|
|
|
|
|
+ (r '(5 4 8 7 10 2) 13)
|
|
|
|
|
+ (r '(6 5 4 3 4 5) -1)
|
|
|
|
|
+ (r '(49 50 48) 147)
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+(main)
|