conway_s_game_of_life.sf 798 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/ruby
  2. var w = `tput cols`.to_i
  3. var h = `tput lines`.to_i
  4. var r = "\033[H"
  5. var dirs = [[-1,-1], [-1, 0], [-1, 1], [ 0,-1],
  6. [ 0, 1], [ 1,-1], [ 1, 0], [ 1, 1]]
  7. var universe = h.of { w.of {1.rand < 0.1} }
  8. func iterate {
  9. var new = h.of { w.of(false) }
  10. static rx = (^h ~X ^w)
  11. for i,j in rx {
  12. var neighbor = 0
  13. for y,x in (dirs.map {|dir| dir »+« [i, j] }) {
  14. universe[y % h][x % w] && ++neighbor
  15. neighbor > 3 && break
  16. }
  17. new[i][j] = (universe[i][j]
  18. ? (neighbor==2 || neighbor==3)
  19. : (neighbor==3))
  20. }
  21. universe = new
  22. }
  23. STDOUT.autoflush(true)
  24. loop {
  25. print r
  26. say universe.map{|row| row.map{|cell| cell ? '#' : ' '}.join }.join("\n")
  27. iterate()
  28. }