(import (chicken string)) (import (chicken format)) (import (chicken io)) (import (chicken sort)) (import srfi-141) (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)) ; PART 2 (define (triangular n) (/ (* n (+ n 1)) 2)) (define (part2- avg) (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))