123456789101112131415161718192021 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/Elementary_cellular_automaton/Infinite_length
- #
- func evolve(rule, bin) {
- var offset = 0
- var (l='', r='')
- 20.times {
- bin.sub!(/^((.)\g2*)/, {|_s1, s2| l = s2; offset -= s2.len; s2*2 })
- bin.sub!(/(.)\g1*$/, {|s1| r = s1; s1*2 })
- printf("%5d| %s%s\n", offset, ' ' * (40 + offset), bin.tr('01','.#'))
- bin = [l*3, 0.to(bin.len-3).map{|i| bin.substr(i, 3) }..., r*3 ].map { |t|
- 1 & (rule >> t.bin)
- }.join
- }
- }
- evolve(90, "010")
|