昨日に引き続き CodeEval から。
(define slices
(lambda (lis n)
(let loop ((l1 lis) (l2 '()))
(if (< (length l1) n)
(reverse l2)
(loop (cdr l1)
(cons (take l1 n) l2))))))
(define sum
(lambda (lis)
(apply + lis)))
(define solv
(lambda (str)
(let* ((s (string-split str ";"))
(n (string->number (car s)))
(lis (map string->number (string-split (cadr s) " "))))
(apply max (cons 0 (map sum (slices lis n)))))))
(define print-solv
(lambda (str)
(print (solv str))))
(define main
(lambda (args)
(with-input-from-file (cadr args)
(lambda ()
(port-for-each print-solv read-line)))))
takatoh@nightschool $ cat input.txt 5;7 -3 -10 4 2 8 -2 4 -5 -2 6;-4 3 -10 5 3 -7 -3 7 -6 3 3;-7 0 -45 34 -24 7 takatoh@nightschool $ gosh max_range_sum.scm input.txt 16 0 17