aboutsummaryrefslogtreecommitdiff
path: root/2022
diff options
context:
space:
mode:
Diffstat (limited to '2022')
-rw-r--r--2022/Day07/part-one.cl27
1 files changed, 10 insertions, 17 deletions
diff --git a/2022/Day07/part-one.cl b/2022/Day07/part-one.cl
index 3f97ff5..e1ffecc 100644
--- a/2022/Day07/part-one.cl
+++ b/2022/Day07/part-one.cl
@@ -6,27 +6,20 @@
(use-package :senzill.io)
(ask-for-stream (prog-input)
- (let* ((folders '("/" 0 NIL)) (current-folder folders))
+ (let* ((folders '("/" 0 0)) (current-folder 0))
(defun parse-cd (loc)
(cond ((string= loc "/")
- (setf current-folder folders))
+ (setf current-folder 0))
((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)))))))
+ (setf current-folder (nth (+ 2 current-folder) folders))
+ (T
+ (setf current-folder (position-if (lambda (x) (and (stringp x) (string= x loc)))
+ 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))
+ (push-back name folders)
+ (push-back 0 folders) ; sum of size of all files
+ (push-back current-folder folders))
(doread-lines (inpt :read-line-options (prog-input NIL))
(cond ((and (char= (char inpt 0) #\$) (char= (char inpt 2) #\c))
@@ -34,7 +27,7 @@
((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))))
+ (+= (nth (+ 1 current-folder) folders) (parse-integer inpt :junk-allowed T))))
(print current-folder)
(force-output))
(print folders)))