33 lines
695 B
Text
33 lines
695 B
Text
class Automaton(rule, cells) {
|
|
|
|
method init {
|
|
rule = sprintf("%08b", rule).chars.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 = 10;
|
|
var auto = Automaton(
|
|
rule: 104,
|
|
cells: [(size/2).of(0)..., 111011010101.digits..., (size/2).of(0)...],
|
|
);
|
|
|
|
size.times {
|
|
say "|#{auto}|";
|
|
auto.next;
|
|
}
|