Elementary cellular automaton: Difference between revisions

Content added Content deleted
m (J: show a bit more)
m (→‎{{header|Sidef}}: modified the code to work with Sidef 2.30)
Line 1,503: Line 1,503:


method init {
method init {
rule = sprintf("%08b", rule).split(1).map{.to_i}.reverse;
rule = sprintf("%08b", rule).chars.map{.to_i}.reverse
}
}


method next {
method next {
var previous = cells.map{_};
var previous = cells.map{_}
var len = previous.len;
var len = previous.len
cells = [rule.@[
cells[] = rule[
previous.range.map { |i|
previous.range.map { |i|
4*previous[i-1 % len] +
4*previous[i-1 % len] +
Line 1,515: Line 1,515:
previous[i+1 % len]
previous[i+1 % len]
}
}
]];
]
}
}


method to_s {
method to_s {
cells.map { _ ? '#' : ' ' }.join('');
cells.map { _ ? '#' : ' ' }.join
}
}
}
}


var size = 20;
var size = 20
var arr = size.of(0);
var arr = size.of(0)
arr[size/2] = 1;
arr[size/2] = 1


var auto = Automaton(90, arr);
var auto = Automaton(90, arr)


(size/2).times {
(size/2).times {
print "|#{auto}|\n";
print "|#{auto}|\n"
auto.next;
auto.next
}</lang>
}</lang>
{{out}}
{{out}}