From a1c8126274d5cd60a385f85f5fd4027f97bbac6c Mon Sep 17 00:00:00 2001 From: Sijmen Schoon Date: Thu, 9 Dec 2021 13:35:26 +0100 Subject: [PATCH] day 7 --- .gitignore | 3 +++ day07.scm | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 day07.scm diff --git a/.gitignore b/.gitignore index 552b246..dd8443a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ *.in .metals/ + +# binaries +day?? diff --git a/day07.scm b/day07.scm new file mode 100644 index 0000000..3ef763b --- /dev/null +++ b/day07.scm @@ -0,0 +1,41 @@ +(import (chicken string)) +(import (chicken format)) +(import (chicken io)) +(import (chicken sort)) +(import (only traversal enumerate)) +(import srfi-1) +(import srfi-14) +(import srfi-60) +(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))