Skip to content

Instantly share code, notes, and snippets.

@Arnot
Created October 6, 2017 15:13
Show Gist options
  • Save Arnot/a964389760ca595907af06e7551ae9a9 to your computer and use it in GitHub Desktop.
Save Arnot/a964389760ca595907af06e7551ae9a9 to your computer and use it in GitHub Desktop.
(defun ca-vectorize ()
(let* ((line (thing-at-point 'line t))
(ll (string-to-list line))
(result (make-vector (1- (length ll)) 0))) ; skip newline
(loop for c in ll
for i below (length ll)
do (unless (equal c ?\n)
(if (equal c ?\s)
(setf (elt result i) 0)
(setf (elt result i) 1))))
result))
(defun ca-step (vec)
(let* ((len (length vec))
(result (make-vector len 0)))
(loop for i below len
do (setf (aref result i)
(cond
((= i 0) (ca-next 0 (aref vec i) (aref vec (1+ i))))
((> i (- len 2)) (ca-next (aref vec (1- i)) (aref vec i) 0))
(t (ca-next (aref vec (1- i)) (aref vec i) (aref vec (1+ i)))))))
result))
(defun ca-next (left middle right)
(let ((x (list left middle right)))
(cond
((equal x '(1 1 1)) 0)
((equal x '(1 1 0)) 1)
((equal x '(1 0 1)) 1)
((equal x '(1 0 0)) 0)
((equal x '(0 1 1)) 1)
((equal x '(0 1 0)) 1)
((equal x '(0 0 1)) 1)
((equal x '(0 0 0)) 0))))
(defun ca-print (vec)
(seq-doseq (c vec)
(if (= c 1)
(insert "*")
(insert " ")))
(insert "\n"))
(let ((vector [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0])
(prev-vector nil))
(do ((i 0))
((or (equal vector prev-vector)
(> i 100)))
(ca-print vector)
(setf prev-vector vector)
(setf vector (ca-step vector))
(incf i)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment