From 9c1e58152495199eacc44419013f7b9d03914f32 Mon Sep 17 00:00:00 2001
From: Aryadev Chavali <aryadev@aryadevchavali.com>
Date: Tue, 17 Oct 2023 14:41:21 +0100
Subject: Current implementation of puzzle-7

Not complete, dunno what to do for parsing and handling CD commands.
---
 2022/puzzle-7.lisp | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)
 create mode 100644 2022/puzzle-7.lisp

diff --git a/2022/puzzle-7.lisp b/2022/puzzle-7.lisp
new file mode 100644
index 0000000..3a4f353
--- /dev/null
+++ b/2022/puzzle-7.lisp
@@ -0,0 +1,47 @@
+(load "lib")
+(defparameter input (uiop:read-file-string "7-input"))
+(defparameter lines (get-lines input)) ;; first line is ALWAYS "$ cd /"
+
+(defun tokenise-lines (lines)
+  "Split each LINE in LINES by space"
+  (mapcar (lambda (line)
+       (mapcar #'clist-to-string
+          (split-completely (string-to-clist line) #\Space)))
+     lines))
+
+(defun token-cmdp (token)
+  "Checks if TOKEN is a command (by the first member)"
+  (string= (car token) "$"))
+
+(defun till-next-cmd (tokens)
+  "Iterates over TOKENS till a command is found, returning the remaining
+tokens (including command)."
+  (loop
+    for token-set on tokens
+    if (token-cmdp (car token-set))
+      return token-set))
+
+(defun parse-ls (tokens)
+  "Converts the following TOKENS till a command (via TOKEN-CMDP) into a
+directory structure i.e. an alist of string names by their content."
+  (loop for token in tokens
+        until (token-cmdp token)
+        collect
+        (let ((size (car token))
+              (name (cadr token)))
+          (if (string= size "dir")
+              `(,name . nil)
+              `(,name . ,(parse-integer size))))))
+
+(defun parse-tokens (tokens)
+  (if (token-cmdp (car tokens))
+      (cond
+        ((string= (cadar tokens) "ls")
+         (values
+          (till-next-cmd (cdr tokens))
+          (parse-ls (cdr tokens))))
+        ((string= (cadar tokens) "cd")
+         ;; TODO: Actually figure out what I should do here
+         (values
+          (cdr tokens)
+          nil)))))
-- 
cgit v1.2.3-13-gbd6f