Created
October 6, 2017 14:40
-
-
Save Arnot/0b39ea8b98a4ac386fee9fbd88d0b57b 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)))) | |
(ca-vectorize) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment