advent-of-code/22/22_2.awk

51 lines
1000 B
Awk

function size( cu ){
split(cu, c, ",")
return (c[2]-c[1]+1)*(c[4]-c[3]+1)*(c[6]-c[5]+1)
}
function cubestate( cu ){
return substr(cu,length(cu))
}
function intersect(cube1, cube2){
split(cube1,c1,",")
split(cube2,c2,",")
difx = (c1[1]<c2[1]) ? c1[2]-c2[1] + 1 : c2[2] - c1[1] + 1
dify = (c1[3]<c2[3]) ? c1[4]-c2[3] + 1 : c2[4] - c1[3] + 1
difz = (c1[5]<c2[5]) ? c1[6]-c2[5] + 1 : c2[6] - c1[5] + 1
print difx, dify, difz
if(difx>0 && dify>0 && difz>0)
return difx*dify*difz
else
return 0
}
{
state = ($1=="on") ? 1 : 0
split($2,arr,",")
split(arr[1],x,/\.\./)
split(arr[2],y,/\.\./)
split(arr[3],z,/\.\./)
sub(/^.=/,"",x[1])
sub(/^.=/,"",y[1])
sub(/^.=/,"",z[1])
x[1] = strtonum(x[1])
y[1] = strtonum(y[1])
z[1] = strtonum(z[1])
cube[NR] = x[1] "," x[2] "," y[1] "," y[2] "," z[1] "," z[2] "," state
print cube[NR], size(cube[NR]), cubestate(cube[NR])
}
END{
print ""
for(i=1;i<NR;i++){
for(j=i+1;j<=NR;j++){
ints[i,j] = intersect(cube[i],cube[j])
}
}
}