diff --git a/day07.scm b/day07.scm index a35bf16..76f3e98 100644 --- a/day07.scm +++ b/day07.scm @@ -7,31 +7,25 @@ (define numbers (map string->number (string-split (read-line) ","))) ; PART 1 -(define sorted (sort numbers <)) -(define median (list-ref sorted (floor/ (length numbers) 2))) - -(define (part1) - (foldl - (lambda (x y) (+ x (abs (- y median)))) - 0 - numbers)) - +(let* ((sorted (sort numbers <)) + (median (list-ref sorted (floor/ (length numbers) 2))) + (part1 + (foldl (lambda (x y) (+ x (abs (- y median)))) + 0 + numbers))) + (format #t "part 1: ~A~%" part1)) ; PART 2 (define (triangular n) (/ (* n (+ n 1)) 2)) (define (part2- avg) - (foldl - (lambda (x y) (+ x (triangular (abs (- y avg))))) - 0 - numbers)) + (foldl (lambda (x y) (+ x (triangular (abs (- y avg))))) + 0 + numbers)) -(define avgCeil (ceiling/ (foldl + 0 numbers) (length numbers))) -(define avgFloor (floor/ (foldl + 0 numbers) (length numbers))) - -(define (part2) - (min (part2- avgCeil) (part2- avgFloor))) - - -(format #t "part 1: ~A~%" (part1)) -(format #t "part 2: ~A~%" (part2)) +(let* ((len (length numbers)) + (sum (foldl + 0 numbers)) + (avg-ceil (ceiling/ sum len)) + (avg-floor (floor/ sum len)) + (part2 (min (part2- avg-ceil) (part2- avg-floor)))) + (format #t "part 2: ~A~%" part2))