require 'numo/narray' require 'numo/gnuplot' require "base64" data = Numo::UInt8.zeros(6,6) data[0..5,0..5] = [[0,0,0,0,0,0], [0,1,1,0,0,0], [0,1,1,0,0,0], [0,0,0,1,1,0], [0,0,0,1,1,0], [0,0,0,0,0,0]] b = Numo::UInt8.zeros(*data.shape) b[1..-2,1..-2] = data[0..-3,0..-3] + data[0..-3,1..-2] + data[0..-3,2..-1] + data[1..-2,0..-3] + data[1..-2,2..-1] + data[2..-1,0..-3] + data[2..-1,1..-2] + data[2..-1,2..-1] b data.store((b.eq 3) | ((b.eq 2) & Numo::Bit.cast(data))) b = Numo::UInt8.zeros(*data.shape) b[1..-2,1..-2] = data[0..-3,0..-3] + data[0..-3,1..-2] + data[0..-3,2..-1] + data[1..-2,0..-3] + data[1..-2,2..-1] + data[2..-1,0..-3] + data[2..-1,1..-2] + data[2..-1,2..-1] data.store((b.eq 3) | ((b.eq 2) & Numo::Bit.cast(data))) b = Numo::UInt8.zeros(*data.shape) b[1..-2,1..-2] = data[0..-3,0..-3] + data[0..-3,1..-2] + data[0..-3,2..-1] + data[1..-2,0..-3] + data[1..-2,2..-1] + data[2..-1,0..-3] + data[2..-1,1..-2] + data[2..-1,2..-1] data.store((b.eq 3) | ((b.eq 2) & Numo::Bit.cast(data))) require 'numo/narray' require 'numo/gnuplot' require "base64" class LifeGameTest def initialize(nx,ny,m) @data = Numo::UInt8.zeros(ny,nx) @data[0..5,0..5] = [[0,0,0,0,0,0], [0,1,1,0,0,0], [0,1,1,0,0,0], [0,0,0,1,1,0], [0,0,0,1,1,0], [0,0,0,0,0,0]] #@data[m..ny-1-m,m..nx-1-m] = Numo::UInt8.new(ny-2*m,nx-2*m).rand(2) @step = 0 end def update b = Numo::UInt8.zeros(*@data.shape) b[1..-2,1..-2] = @data[0..-3,0..-3] + @data[0..-3,1..-2] + @data[0..-3,2..-1] + @data[1..-2,0..-3] + @data[1..-2,2..-1] + @data[2..-1,0..-3] + @data[2..-1,1..-2] + @data[2..-1,2..-1] @data.store((b.eq 3) | ((b.eq 2) & Numo::Bit.cast(@data))) @step += 1 end attr_reader :data,:step end nx,ny = 6, 6 # don't modify life = LifeGameTest.new(nx,ny,1) filename = "lifegameTest.gif" Numo.gnuplot do reset set output: filename set term: "gif", animate:true, delay:50, size:[500,500] set :nokey set size: {ratio:1.0*ny/nx} set xrange: -1..nx set yrange: -1..ny unset :colorbox set palette_defined:'(0 "white", 1 "green")' 10.times do |i| life.update if i > 0 set title:"lifegame step=#{i}" plot life.data, flipy:true, with:"image" end set :output end img = Base64.strict_encode64(File.binread(filename)) IRuby.html %Q()