conway_s_game_of_life.sf 818 B

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