diff --git a/day01-easy/main.scm b/day01-easy/main.scm index c429173..37fa6e8 100755 --- a/day01-easy/main.scm +++ b/day01-easy/main.scm @@ -16,6 +16,12 @@ '() (cons (mapper (car list)) (map (cdr list) mapper)))) +(define (reduce list reducer current) + (if + (null? list) + current + (reduce (cdr list) reducer (reducer current (car list))))) + (define (first-last-combine current rest) (if (null? current) @@ -36,26 +42,16 @@ '()) (first-last (cdr list) predicate)))) -(define (sum numbers) - (if - (null? numbers) - 0 - (+ (car numbers) (sum (cdr numbers))) - )) +(define (sum numbers) (reduce numbers + 0)) (define (solve-line line) ( - #!(lambda (first-last-result) (sum (map first-last-result (lambda (char) (string->number (string char))))))!# (lambda (first-last-result) (string->number (list->string first-last-result))) (first-last (string->list line) (lambda (char) (if (char-numeric? char) #t #f))))) (define (solve-all lines) - (if - (null? lines) - 0 - (+ (solve-line (car lines)) (solve-all (cdr lines))) - )) + (sum (map lines solve-line))) (display (solve-all (read-lines)))