42 lines
760 B
Awk
42 lines
760 B
Awk
BEGIN { FS = "" }
|
|
|
|
{ for(i=1;i<=NF;i++) o[NR,i] = $i }
|
|
|
|
END{
|
|
s=1
|
|
while(nflashes!=NF*NR){
|
|
nflashes = 0
|
|
delete visited
|
|
for(i in o) o[i]++
|
|
|
|
do{
|
|
for(y=1;y<=NR;y++){
|
|
for(x=1;x<=NF;x++){
|
|
if(!visited[y,x] && o[y,x]>9){
|
|
if(y>1 && x>1) o[y-1,x-1]++
|
|
if(y>1 && x<NF) o[y-1,x+1]++
|
|
if(y>1) o[y-1,x]++
|
|
if(x>1) o[y,x-1]++
|
|
if(x<NF) o[y,x+1]++
|
|
if(y<NR && x>1) o[y+1,x-1]++
|
|
if(y<NR && x<NF) o[y+1,x+1]++
|
|
if(y<NR) o[y+1,x]++
|
|
visited[y,x] = 1
|
|
}
|
|
}
|
|
}
|
|
tochange=0
|
|
for(i in o) tochange+=(o[i]>9) && !visited[i]
|
|
|
|
} while(tochange)
|
|
|
|
for(i in o ){
|
|
if( o[i]>9 ){ o[i] = 0; nflashes++ }
|
|
}
|
|
flashes += nflashes
|
|
if(s==100) print "part 1:", flashes
|
|
s++
|
|
}
|
|
print "part 2: step", s-1
|
|
}
|