Slide 71
Slide 71 text
Conway’s Game
of Life
NArray.byte(5,5):
[ [ 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 1, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 1, 1, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ]
NArray.byte(5,5):
[ [ 0, 0, 0, 0, 0 ],
[ 0, 0, 2, 0, 0 ],
[ 0, 3, 4, 2, 0 ],
[ 0, 1, 1, 1, 0 ],
[ 0, 0, 0, 0, 0 ] ]
NArray.byte(5,5):
[ [ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ]
#!/usr/bin/env ruby -wKU
!
require "rubygems"
require "narray"
!
# build cells
life = NArray.byte(5, 5)
life[1, 1] = NArray.byte(3, 3).random!(2)
p life
!
# count neighbors
counts = NArray.byte(*life.shape)
counts[1..-2, 1..-2] =
life[0..-3, 0..-3] + life[0..-3, 1..-2] + life[0..-3, 2..-1] +
life[1..-2, 0..-3] + life[1..-2, 2..-1] +
life[2..-1, 0..-3] + life[2..-1, 1..-2] + life[2..-1, 2..-1]
p counts
!
# one step of the game
life[] = counts.eq(3) | (counts.eq(2) & life)
p life