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