diff options
author | Yann Herklotz <git@yannherklotz.com> | 2021-12-22 19:28:59 +0100 |
---|---|---|
committer | Yann Herklotz <git@yannherklotz.com> | 2021-12-22 19:28:59 +0100 |
commit | be64f23b8d9c51750011c92a6ed3a9c673c3b1a2 (patch) | |
tree | c3fdc89448da8902237e59da86ae60b37b726050 /src | |
parent | 9520f3b2dc505d48c3987afdaa856b97e3cfa1cf (diff) | |
download | aoc21-be64f23b8d9c51750011c92a6ed3a9c673c3b1a2.tar.gz aoc21-be64f23b8d9c51750011c92a6ed3a9c673c3b1a2.zip |
Add day 6main
Diffstat (limited to 'src')
-rw-r--r-- | src/06.lisp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/06.lisp b/src/06.lisp new file mode 100644 index 0000000..8a7d2ec --- /dev/null +++ b/src/06.lisp @@ -0,0 +1,37 @@ +(use-package 'cl-ppcre) +(use-package 'trivia) + +(defun 06/parse-input-direct (input) + (mapcar #'parse-integer (split "," (car input)))) + +(defun 06/parse-input (input-file) + (06/parse-input-direct (get-file-lines input-file))) + +(defun 06/one-iter (parsed-input) + (let* ((new 0) + (new-map (mapcar (lambda (x) (if (> x 0) (- x 1) (progn (incf new) 6))) parsed-input))) + (append new-map (make-list new :initial-element 8)))) + +(defun 06/part-a (parsed-input) + (loop for i from 1 upto 80 + do (setf parsed-input (06/one-iter parsed-input))) + (list-length parsed-input)) + +(defun 06/another-iter (arr new) + (loop for i from 8 downto 0 + for n = (aref arr i) + do (if (zerop i) + (progn + (setf (aref new 8) n) + (incf (aref new 6) n)) + (setf (aref new (1- i)) n)))) + +(defun 06/part-b (parsed-input) + (let ((initial (make-array 9 :initial-element 0)) + (new (make-array 9))) + (dolist (i parsed-input) (incf (aref initial i))) + (loop for x below 256 + do (progn (06/another-iter initial new) + (rotatef initial new))) + (apply #'+ (loop for x below 9 + collect (aref initial x))))) |