セルオートマトン
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')
}