fcn deconv(g,f){ flen, glen, delta:=f.len(), g.len(), glen - flen + 1; result:=List.createLong(delta); // allocate list with space for items foreach n in (delta){ e:=g[n]; lowerBound:=(if (n>=flen) n - flen + 1 else 0); foreach i in ([lowerBound .. n-1]){ e-=result[i]*f[n - i]; } result.append(e/f[0]); } result; }