diff options
| author | Syndamia <kamen@syndamia.com> | 2022-12-07 12:31:28 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2022-12-07 12:31:28 +0200 |
| commit | ab60ec374d8952843264c9ebd3cd8f2dfca3a8a3 (patch) | |
| tree | 304cbf0c67f05551aa84be18604a4e398baea588 /2022 | |
| parent | 6be36bd3331f81e9a1ce00d0761c20761c25213e (diff) | |
| download | advent-of-code-ab60ec374d8952843264c9ebd3cd8f2dfca3a8a3.tar advent-of-code-ab60ec374d8952843264c9ebd3cd8f2dfca3a8a3.tar.gz advent-of-code-ab60ec374d8952843264c9ebd3cd8f2dfca3a8a3.zip | |
[2022/D07] Reworked how file structure is stored
Diffstat (limited to '2022')
| -rw-r--r-- | 2022/Day07/part-one.cl | 27 |
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))) |
