elementary_cellular_automaton.sf 704 B

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/ruby
  2. class Automaton(rule, cells) {
  3. method init {
  4. rule = sprintf("%08b", rule).split(1).map{.to_i}.reverse;
  5. }
  6. method next {
  7. var previous = cells.map{_};
  8. var len = previous.len;
  9. cells[] = rule[
  10. previous.range.map { |i|
  11. 4*previous[i-1 % len] +
  12. 2*previous[i] +
  13. previous[i+1 % len]
  14. }
  15. ]
  16. }
  17. method to_s {
  18. cells.map { _ ? '#' : ' ' }.join('')
  19. }
  20. }
  21. var size = 20;
  22. var arr = size.of(0);
  23. arr[size/2] = 1;
  24. var auto = Automaton(90, arr);
  25. (size/2).times {
  26. print "|#{auto}|\n";
  27. auto.next;
  28. };