33 lines
670 B
Text
33 lines
670 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 = 20
|
|
var arr = size.of(0)
|
|
arr[size/2] = 1
|
|
|
|
var auto = Automaton(90, arr)
|
|
|
|
(size/2).times {
|
|
print "|#{auto}|\n"
|
|
auto.next
|
|
}
|