Compare commits

...

2 Commits

Author SHA1 Message Date
sejo 73fd80dfb6 day 11 stats 2021-12-10 23:52:24 -06:00
sejo 935860d8b1 day 11! 2021-12-10 23:51:22 -06:00
4 changed files with 114 additions and 0 deletions

52
11/11.awk Normal file
View File

@ -0,0 +1,52 @@
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 ""
}

47
11/11_2.awk Normal file
View File

@ -0,0 +1,47 @@
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 && 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)
for(i in flashed ){
nflashes += flashed[i]>0
if( flashed[i] ) o[i] = 0
}
print "step", s++, ":", nflashes
}
print ""
}

14
11/Makefile Normal file
View File

@ -0,0 +1,14 @@
1t:
awk -f 11.awk test
1i:
awk -f 11.awk input
2t:
awk -f 11_2.awk test
2i:
awk -f 11_2.awk input
paste:
xclip -sel c -o > test

View File

@ -27,6 +27,7 @@ awk -c -f 01.awk inputfile
```
-------Part 1-------- -------Part 2--------
Day Time Rank Score Time Rank Score
11 00:46:21 4284 0 00:49:55 4145 0
10 00:19:04 4202 0 00:28:32 3347 0
9 00:12:52 2598 0 00:55:08 4504 0
8 00:06:26 580 0 01:02:03 2196 0