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 }