2021/day07.scm

32 lines
836 B
Scheme
Raw Normal View History

2021-12-09 12:35:26 +00:00
(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
(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))
2021-12-09 12:35:26 +00:00
; PART 2
(define (triangular n) (/ (* n (+ n 1)) 2))
(define (part2- avg)
(foldl (lambda (x y) (+ x (triangular (abs (- y avg)))))
0
numbers))
(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))