tonegafib(n) = { my (v=0, neg=0, pos=0, f); for (e=0, oo, f=fibonacci(-1-e); if (f<0, neg+=f, pos+=f); if (neg <=n && n <= pos, while (n, if (f<0, neg-=f, pos-=f); if (neg > n || n > pos, v+=2^e; n-=f; ); f=fibonacci(-1-e--); ); return (v); ); ); } fromnegafib(n) = { my (v=0, e); while (n, n-=2^e=valuation(n, 2); v+=fibonacci(-1-e); ); return (v); } a(n) = { if (n==0, 0, my (f=tonegafib(n), z=valuation(f,2), r=2^z * fromdigits(Vecrev(binary(f/2^z)),2)); fromnegafib(r); ); } for (n=0, fibonacci(21)-1, print (n " ", -a(-n))) quit