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 {
|
default = pkgs.mkShellNoCC {
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
shellcheck
|
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