RosettaCodeData/Task/Elementary-cellular-automaton/Scheme/elementary-cellular-automaton.ss
2023-07-01 13:44:08 -04:00

29 lines
734 B
Scheme

; uses SRFI-1 library http://srfi.schemers.org/srfi-1/srfi-1.html
(define (evolve ls r)
(unfold
(lambda (x) (null? (cddr x)))
(lambda (x)
(vector-ref r (+ (* 4 (first x)) (* 2 (second x)) (third x))))
cdr
(cons (last ls) (append ls (list (car ls))))))
(define (automaton s r n)
(define (*automaton s0 rv n)
(for-each (lambda (x) (display (if (zero? x) #\. #\#))) s0)
(newline)
(if (not (zero? n))
(let ((s1 (evolve s0 rv)))
(*automaton s1 rv (- n 1)))))
(display "Rule ")
(display r)
(newline)
(*automaton
s
(list->vector
(append
(int->bin r)
(make-list (- 7 (floor (/ (log r) (log 2)))) 0)))
n))
(automaton '(0 1 0 0 0 1 0 1 0 0 1 1 1 1 0 0 0 0 0 1) 30 20)