aboutsummaryrefslogtreecommitdiff
path: root/2022
diff options
context:
space:
mode:
Diffstat (limited to '2022')
-rw-r--r--2022/Day07/part-one.cl40
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)))