From 6c8340752cb55d49bf514dc0fda90e54fa571967 Mon Sep 17 00:00:00 2001 From: Alan Daniels Date: Wed, 10 Dec 2025 20:19:45 +1100 Subject: [PATCH] day 4 part 1 --- 04a.lisp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 04example.txt | 10 ++++++++++ 2 files changed, 63 insertions(+) create mode 100644 04a.lisp create mode 100644 04example.txt diff --git a/04a.lisp b/04a.lisp new file mode 100644 index 0000000..95ac703 --- /dev/null +++ b/04a.lisp @@ -0,0 +1,53 @@ +(require :uiop) +(load (sb-ext:posix-getenv "ASDF")) +(asdf:load-system 'str) + +(defun read-diagram (lines) + (let* ( + (dim (length lines)) + (diagram (make-array (list dim dim)))) + (loop for line in lines + for y from 0 + do (loop for char across line + for x from 0 + do (if (char-equal char #\@) + (setf (aref diagram y x) 1)))) + diagram)) +(read-diagram (uiop:read-file-lines "04example.txt")) + +(defun make-kernel (diagram -x -y) + (let ( (kernel (make-array '(3 3)))) + (loop for y from -1 to 1 + do (loop for x from -1 to 1 + do (let ((-x (+ -x x)) + (-y (+ -y y))) + (if (array-in-bounds-p diagram -y -x) + (setf (aref kernel (+ y 1) (+ x 1)) (aref diagram -y -x)) + (setf (aref kernel (+ y 1) (+ x 1)) 0))))) + kernel)) +(make-kernel (read-diagram (uiop:read-file-lines "04example.txt")) 0 2) + +(defun sum-kernel (kernel) + (if (= (aref kernel 1 1) 1) + (if + (< + (- + (loop for y from 0 to 2 + sum (loop for x from 0 to 2 + sum (aref kernel y x))) + 1) + 4) + 1 + 0) + 0)) +(sum-kernel (make-kernel (read-diagram (uiop:read-file-lines "04example.txt")) 2 0)) + +(defun sum-diagram (lines) + (let ( (dim (length lines)) + (diagram (read-diagram lines))) + (loop for y from 0 to dim + sum (loop for x from 0 to dim + sum (sum-kernel (make-kernel diagram x y)))))) + +(sum-diagram (uiop:read-file-lines "04example.txt")) +(sum-diagram (uiop:read-file-lines "04data.txt")) diff --git a/04example.txt b/04example.txt new file mode 100644 index 0000000..8209399 --- /dev/null +++ b/04example.txt @@ -0,0 +1,10 @@ +..@@.@@@@. +@@@.@.@.@@ +@@@@@.@.@@ +@.@@@@..@. +@@.@@@@.@@ +.@@@@@@@.@ +.@.@.@.@@@ +@.@@@.@@@@ +.@@@@@@@@. +@.@.@@@.@.