Created
October 6, 2017 15:13
-
-
Save Arnot/a964389760ca595907af06e7551ae9a9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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