セルオートマトン
2次元のセルオートマトン
# ルール:
(1) cell[i,j]が0であり、かつ、周りの8つのセルに「1」の状態であるセルが2つある時に、cell[i,j]の次世代での状態は「1」となる
(2) cell[i,j]が1であり、かつ、周りの8つのセルに「1」の状態であるセルが1つか2つある時に、cell[i,j]の次世代での状態は「1」のままである
(3) (1)と(2)以外は全て「0」とする
解答例
par(mfrow=c(7,7)); par(mai=c(1/10,1/10,1/10,1/10)); nGen=48;nR=75;nC=75; field=matrix(0,nR,nC);field[37:38,37:38]=1 image(field,xaxt='n',yaxt='n') for (i_gen in 1:nGen){ field2=cbind(field[,nC],field,field[,1]) field3=rbind(field2[nR,],field2,field2[1,]) field.temp=matrix(0,nrow=nR+2,ncol=nC+2); for (i_row in 2:(nR+1)){ for (i_col in 2:(nC+1)){ nOnes=sum(field3[i_row-1,(i_col-1):(i_col+1)])+ (field3[i_row,i_col-1]+field3[i_row,i_col+1])+ sum(field3[i_row+1,(i_col-1):(i_col+1)]) if (nOnes==2) { field.temp[i_row,i_col]=1 } if (nOnes==1 & field3[i_row,i_col]==1) { field.temp[i_row,i_col]=1} } } field=field.temp[2:(nR+1),2:(nC+1)] image(field,xaxt='n',yaxt='n') }