diff options
Diffstat (limited to '2022')
| -rw-r--r-- | 2022/Day07/part-one.cl | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/2022/Day07/part-one.cl b/2022/Day07/part-one.cl new file mode 100644 index 0000000..3f97ff5 --- /dev/null +++ b/2022/Day07/part-one.cl @@ -0,0 +1,40 @@ + +;;; https://gitlab.com/Syndamia/senzill +(require :senzill) +(use-package :senzill.math) +(use-package :senzill.collections) +(use-package :senzill.io) + +(ask-for-stream (prog-input) + (let* ((folders '("/" 0 NIL)) (current-folder folders)) + (defun parse-cd (loc) + (cond ((string= loc "/") + (setf current-folder folders)) + ((string= loc "..") + (let ((working-fold folders)) + (loop for ind in (third current-folder) + until (cdr (third current-folder)) do + (setf working-fold (nth ind working-fold))) + (setf current-folder working-fold))) + (t + (setf current-folder (first (member-if (lambda (x) (string= (first x) loc)) + (nthcdr 3 current-folder))))))) + + (defun parse-dir (name) + (push-back (list + name ; name + 0 ; sum of size of all files + (append (third current-folder) ; location instructions for parent + (list (- (length current-folder) 1)))) + current-folder)) + + (doread-lines (inpt :read-line-options (prog-input NIL)) + (cond ((and (char= (char inpt 0) #\$) (char= (char inpt 2) #\c)) + (parse-cd (subseq inpt 5))) + ((char= (char inpt 0) #\d) + (parse-dir (subseq inpt 4))) + ((digit-char-p (char inpt 0)) + (+= (second current-folder) (parse-integer inpt :junk-allowed T)))) + (print current-folder) + (force-output)) + (print folders))) |
