;;; 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 0)) (current-folder 0)) (defun parse-cd (loc) (cond ((string= loc "/") (setf current-folder 0)) ((string= loc "..") (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 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)) (parse-cd (subseq inpt 5))) ((char= (char inpt 0) #\d) (parse-dir (subseq inpt 4))) ((digit-char-p (char inpt 0)) (+= (nth (+ 1 current-folder) folders) (parse-integer inpt :junk-allowed T)))) (print current-folder) (force-output)) (print folders)))