day 4 part 2
This commit is contained in:
parent
242088b896
commit
9959416bcc
1 changed files with 70 additions and 0 deletions
70
04b.lisp
Normal file
70
04b.lisp
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
(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)
|
||||
(and
|
||||
(= (aref kernel 1 1) 1)
|
||||
(<
|
||||
(-
|
||||
(loop for y from 0 to 2
|
||||
sum (loop for x from 0 to 2
|
||||
sum (aref kernel y x)))
|
||||
1)
|
||||
4)
|
||||
))
|
||||
(sum-kernel (make-kernel (read-diagram (uiop:read-file-lines "04example.txt")) 2 0))
|
||||
|
||||
(defun sum-diagram (lines)
|
||||
(let ((dim (- (length lines) 1))
|
||||
(diagram (read-diagram lines))
|
||||
(subtotal 0)
|
||||
(total 0))
|
||||
(loop
|
||||
do
|
||||
(progn
|
||||
(setq subtotal (loop for y from 0 to dim
|
||||
sum (loop for x from 0 to dim
|
||||
sum (if (sum-kernel (make-kernel diagram x y))
|
||||
(progn
|
||||
(setf (aref diagram y x) 0)
|
||||
1)
|
||||
0))))
|
||||
(setq total (+ total subtotal))
|
||||
)
|
||||
until (= subtotal 0)
|
||||
;; do (progn
|
||||
;; (print diagram)
|
||||
;; (print subtotal)
|
||||
;; (print total)
|
||||
;; (sleep 1))
|
||||
)
|
||||
total
|
||||
))
|
||||
(sum-diagram (uiop:read-file-lines "04example.txt"))
|
||||
(sum-diagram (uiop:read-file-lines "04data.txt"))
|
||||
Loading…
Add table
Add a link
Reference in a new issue