advent-of-code/19/19.awk

45 lines
804 B
Awk

function abs(n){
return (n>=0) ? n : -n
}
function diff(s1, s2){
split(s1,a1,",")
split(s2,a2,",")
sr = ""
for(i in a1)
sr = sr abs(a1[i]-a2[i]) (i<3? "," : "")
return sr
}
function similar(d1, d2){
split(d1,a1,",")
split(d2,a2,",")
if(a1[1]==a2[1] && a1[2]==a2[2] && a1[3]==a2[3]) return 1
if(a1[1]==a2[1] && a1[2]==a2[3] && a1[3]==a2[2]) return 2
if(a1[1]==a2[2] && a1[2]==a2[1] && a1[3]==a2[3]) return 3
if(a1[1]==a2[2] && a1[2]==a2[3] && a1[3]==a2[1]) return 4
if(a1[1]==a2[3] && a1[2]==a2[1] && a1[3]==a2[2]) return 5
if(a1[1]==a2[3] && a1[2]==a2[2] && a1[3]==a2[1]) return 6
return -1
}
BEGIN{
}
NR%2==1{
s1 = $0
next
}
{
r = diff(s1,$0)
diffs[++diffsp] = r
}
END{
print diffsp
for(i=1; i<diffsp; i++){
print diffs[i], diffs[i+1],similar( diffs[i], diffs[i+1] )
}
}