#!/usr/bin/ruby
class Automaton(rule, cells) {
method init {
rule = sprintf("%08b", rule).split(1).map{.to_i}.reverse;
}
method next {
var previous = cells.map{_};
var len = previous.len;
cells[] = rule[
previous.range.map { |i|
4*previous[i-1 % len] +
2*previous[i] +
previous[i+1 % len]
}
]
}
method to_s {
cells.map { _ ? '#' : ' ' }.join('')
}
}
var size = 20;
var arr = size.of(0);
arr[size/2] = 1;
var auto = Automaton(90, arr);
(size/2).times {
print "|#{auto}|\n";
auto.next;
};