\\ compute potential right part for n right(d) = { my (r=vector(#d)); for (k=1, #d, r[#r+1-k] = centerlift(Mod(d[1], 3)); d = - vector(#d-1, k, d[k] + d[k+1]); ); return (r); } \\ balanced ternary digits of n bterdigits(n) = { my (dd=[], d); while (n, dd=concat(d = [0,1,-1][1+n%3], dd); n=(n-d)/3;); return (dd); } \\ does the triangle for n have 3-fold rotational symmetry? is(n) = { my (d = Mod(bterdigits(n), 3), r = d); for (k = 1, #d, if (d[#d+1-k] != r[1], return (0); ); r = -vector(#r-1, k, r[k]+r[k+1]); ); return (1); } { k = 0; print (k++ " " 0); \\ special case for (w=1, oo, low = (3^(w-1)+1) / 2; hig = (3^w-1) / 2; \\ odd length for (p = low, hig, d = bterdigits(p); r = right(d); if (d[1]==r[#r] && d[#d]==r[1], v = fromdigits(concat(d, r[2..#r]), 3); if (is(v), print (k++ " " v); ); ); ); \\ even length for (p = low, hig, d = bterdigits(p); r = right(d); if (d[1]==r[#r], v = fromdigits(concat(d, r), 3); if (is(v), print (k++ " " v); ); ); ); if (k >= 10 000, break; ); ); }