day 3 part 2
This commit is contained in:
parent
3aff1cd302
commit
88fa4fed05
2 changed files with 41 additions and 1 deletions
40
03b.lisp
Normal file
40
03b.lisp
Normal 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)
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
default = pkgs.mkShellNoCC {
|
||||
packages = with pkgs; [
|
||||
shellcheck
|
||||
(sbcl.withPackages (ps: [ps.str]))
|
||||
(sbcl.withPackages (ps: [ps.str ps.cl-heap]))
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue