28 lines
442 B
Awk
28 lines
442 B
Awk
#!/usr/bin/awk -f
|
|
BEGIN {
|
|
if (p<1) {p = 1};
|
|
}
|
|
|
|
function diff(s, p) {
|
|
# pascal triangled with sign changes
|
|
b[1] = (p%2) ? 1 : -1;
|
|
for (j=1; j < p; j++) {
|
|
b[j+1] = -b[j]*(p-j)/j;
|
|
};
|
|
|
|
n = split(s, a, " ");
|
|
s = "";
|
|
for (j = 1; j <= n-p+1; j++) {
|
|
c = 0;
|
|
for(i = 1; i <= p; i++) {
|
|
c += b[i]*a[j+i-1];
|
|
}
|
|
s = s" "c;
|
|
}
|
|
return s;
|
|
}
|
|
|
|
{
|
|
print diff($0, p);
|
|
}
|