day 3 part 2

This commit is contained in:
Alan Daniels 2025-12-08 22:02:42 +11:00
parent 3aff1cd302
commit 88fa4fed05
2 changed files with 41 additions and 1 deletions

40
03b.lisp Normal file
View file

@ -0,0 +1,40 @@
(require :uiop)
(load (sb-ext:posix-getenv "ASDF"))
(asdf:load-system 'cl-heap)
(defun bank-max-joltage-step (known-buffer unknown-buffer depth)
;; (format t "~A:~A~%" known-buffer unknown-buffer)
(if (= (length known-buffer) depth)
(parse-integer known-buffer)
(loop for i from 0 to (- (length unknown-buffer) (- depth (length known-buffer)))
collect
(let* (
(digit (subseq unknown-buffer i (+ i 1)))
(new-unknown-buffer (subseq unknown-buffer (+ i 1)))
(new-known-buffer (format nil "~A~A" known-buffer digit)))
(list (- 0 (parse-integer new-known-buffer)) new-known-buffer new-unknown-buffer depth)))))
(bank-max-joltage-step "" "234234234234278" 2)
(defun bank-max-joltage (bank depth)
(defparameter *queue* (make-instance 'cl-heap:priority-queue))
(cl-heap:enqueue *queue* (list "" bank depth) 0)
(loop
do (defparameter *candidate* (apply #'bank-max-joltage-step (cl-heap:dequeue *queue*)))
when (integerp *candidate*)
do (return *candidate*)
do (loop for branch in (reverse *candidate*)
do (cl-heap:enqueue *queue* (cdr branch) (car branch)))
)
)
(bank-max-joltage "234234234234278" 2)
(bank-max-joltage "234234234234278" 12)
(defun bank-max-joltage12 (bank)
(bank-max-joltage bank 12)
)
(defun array-total-joltage (bank-list depth)
(reduce #'+
(mapcar #'bank-max-joltage12 bank-list)))
(array-total-joltage (uiop:read-file-lines "03example.txt") 12)
(array-total-joltage (uiop:read-file-lines "03data.txt") 12)