BEGIN { FS = "" } { for(i=1;i<=NF;i++) o[NR,i] = $i } END{ print NF,NR s=1 while(nflashes!=NF*NR){ nflashes = 0 delete flashed; delete visited for(i in o) flashed[i] = 0 for(i in o){ o[i]++ if(!flashed[i] && o[i]>9) flashed[i] = 1 } do{ for(y=1;y<=NR;y++){ for(x=1;x<=NF;x++){ if(!visited[y,x] && flashed[y,x]){ if(y>1 && x>1){ o[y-1,x-1]++; flashed[y-1,x-1]=o[y-1,x-1]>9; } if(y>1 && x9; } if(y>1){ o[y-1,x]++; flashed[y-1,x]=o[y-1,x]>9;} if(x>1){ o[y,x-1]++; flashed[y,x-1]=o[y,x-1]>9; } if(x9; } if(y1){ o[y+1,x-1]++; flashed[y+1,x-1]=o[y+1,x-1]>9; } if(y9; } if(y9; } visited[y,x] = 1 } } } tochange=0 for(i in flashed) tochange+=flashed[i]!=visited[i] } while(tochange) for(i in flashed ){ nflashes += flashed[i]>0 if( flashed[i] ) o[i] = 0 } print "step", s++, ":", nflashes } print "" }