53 lines
1.2 KiB
Awk
53 lines
1.2 KiB
Awk
BEGIN {
|
|
FS = ""
|
|
}
|
|
{
|
|
for(i=1;i<=NF;i++) o[NR,i] = $i
|
|
}
|
|
END{
|
|
flashes = 0
|
|
for(s=1;s<=100;s++){
|
|
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 && x<NF){ o[y-1,x+1]++; flashed[y-1,x+1]=o[y-1,x+1]>9; }
|
|
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(x<NF){ o[y,x+1]++; flashed[y,x+1]=o[y,x+1]>9; }
|
|
if(y<NR && x>1){ o[y+1,x-1]++; flashed[y+1,x-1]=o[y+1,x-1]>9; }
|
|
if(y<NR && x<NF){ o[y+1,x+1]++; flashed[y+1,x+1]=o[y+1,x+1]>9; }
|
|
if(y<NR){ o[y+1,x]++; flashed[y+1,x]=o[y+1,x]>9; }
|
|
visited[y,x] = 1
|
|
}
|
|
}
|
|
}
|
|
tochange=0
|
|
for(i in flashed) tochange+=flashed[i]!=visited[i]
|
|
} while(tochange)
|
|
print "after step", s
|
|
for(y=1;y<=NR;y++){
|
|
for(x=1;x<=NF;x++){
|
|
# printf "%d:%d\t", o[y,x], flashed[y,x]
|
|
printf "%d",flashed[y,x]
|
|
}
|
|
print ""
|
|
}
|
|
for(i in flashed ){
|
|
flashes += flashed[i]>0
|
|
if( flashed[i] ) o[i] = 0
|
|
}
|
|
print "---", flashes
|
|
}
|
|
|
|
print ""
|
|
}
|