blob: e1ffecc41a66af892f2a6110c0a0aac6ae92bcb2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
;;; 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)))
|