67 lines
1.3 KiB
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
|
|
}
|