advent-of-code/12021/17/17.awk

67 lines
1.3 KiB
Awk

function step(){
x += velx
y += vely
velx += (velx>0) ? -1 : (velx<0) ? 1 : 0
vely -= 1
}
function insidearea(){
return x>=xmin && x<=xmax && y>=ymin && y<=ymax
}
function outofbounds(){
return y<ymin
}
{
print $3
gsub("x=","",$3)
gsub(",","",$3)
split($3,arr,/\.\./)
xmin= arr[1]
xmax = arr[2]
print $4
gsub("y=","",$4)
split($4,arr,/\.\./)
ymin= arr[1]
ymax = arr[2]
}
END{
print xmin,xmax,ymin,ymax
maxy = 0; maxyvelx = 0; maxyvely = 0;
count = 0
minxa=0; minya=0; maxxa=0; maxya=0
# 0 -75 275 74
for(tvely=-100;tvely<=100;tvely++){
for(tvelx=0;tvelx<=300;tvelx++){
x=0; y=0; localmaxy = 0;
velx = tvelx; vely = tvely;
delete visited;
# print "testing", velx, vely
while(!insidearea() && !outofbounds()){
step();
# print x,y,velx,vely
if(y>localmaxy) localmaxy = y
}
if(insidearea()){
print "arrived"
count++
if(tvelx<minxa) minxa = tvelx
if(tvely<minya) minya = tvely
if(tvelx>maxxa) maxxa = tvelx
if(tvely>maxya) maxya = tvely
if(localmaxy>maxy){
maxy = localmaxy
maxyvelx = tvelx
maxyvely = tvely
# print "new max", maxy, maxyvelx, maxyvely
}
print tvelx, tvely, localmaxy, maxy
}
}
}
print "part 1:", maxy, maxyvelx, maxyvely
print "part 2:", count
print minxa, minya, maxxa, maxya
}