is(n) = {my(v = vecsort(vector(8, i, d = digits(n, i+1); if(d[1] < d[#d], Vecrev(d), d)))); for(i = 1, 7, if(v[i] == v[i+1], return(1))); 0} \\is(n) = {my(v = vecsort(vector(2, i, d = digits(n, i+7); if(d[1] < d[#d], Vecrev(d), d)))); for(i = 1, 1, if(v[i] == v[i+1], return(1))); 0} \\ assuming only bases 8 and 9 \\ 7-8-2020 \\digs(n, b) = my(d = digits(n, b)); if(d[1] < d[#d], Vecrev(d), d) overlap(v, w) = { if(v[1] > w[1], g = v; v = w; w = g; ); if(w[1] > v[2], return(0) , return([w[1], v[2]]) ) } seq() = { res = List([1, 2, 3, 4, 5, 6, 7, 9, 11, 17, 22, 31, 51]); qchecks = 0; for(qdig = 3, 26, \\for(qdig = 18, 26, for(j = 0, 8, \\for(j = 8, 8, for(k = j+1, 9, print1([qdig, j, k]", "); process(qdig, j, k) ) ) ); listsort(res, 1); print(); print(); print(qchecks); print(); print(); res } process(qdigs, b1, b2) = { v = vector(qdigs); for(i = 1, b1-1, for(j = i, b1 - 1, print1([qdigs, b1, b2, i, j]); cv = v; cv[1] = i; cv[qdigs] = j; rcv = Vecrev(cv); r1 = [minpossible(rcv, b1), maxpossible(rcv, b1)]; r2 = [minpossible(cv, b2), maxpossible(cv, b2, b1-1)]; ov = overlap(r1, r2); if(ov != 0, \\print(); \\print(cv" "r1" "r2" "ov" "ov[2]-ov[1]); proceedprocess(cv, b1, b2, 2); ) ) ) } proceedprocess(v, b1, b2, pos) = {my(cv, cpos = pos); qchecks++; ov = overlap(r1, r2); gb = gcd(b1, b2); if(ov != 0, for(i = 0, b1 - 1, cv = v; cv[pos] = i; r1 = [minpossible(rcv, b1), maxpossible(rcv, b1)]; r2 = [minpossible(cv, b2), maxpossible(cv, b2, b1-1, pos+1)]; rem1 = fromdigits(vector(pos, i, cv[pos+1-i]), b1); rem2 = v[#v]; ov1 = overlap(r1, r2); if(cpos < #v - 11, \\ proceedprocess(cv, b1, b2, cpos + 1) ); if(ov1 != 0, lc = lcm(b1^pos, b2); if((ov1[2] - ov1[1]) \ lc < 10000, sf = safechinese(rem1, b1^pos, rem2, b2); if(sf != 0, forstep(j = nextinmodclass(ov1[1], lc, lift(sf)), ov1[2], lc, if(is(j), print1(j", "); print(); print(); listput(res, j); print(res); print(); print(); ) ) ) , proceedprocess(cv, b1, b2, cpos + 1) ) ) ) ) } safechinese(r1, m1, r2, m2) = { my(g = gcd(m1, m2)); if((r1 % g) == (r2 % g), chinese(Mod(r1, m1), Mod(r2, m2)) , 0 ) } nextinmodclass(n, m, {r = 0}) = { m*ceil((n-r)/m) + r } merge(v, w) = { if(v[1] > w[1], g = v; v = w; w = g; ); if(w[1] <= v[2] + 1, return([v[1], max(w[2], v[2])]) , return([v, w]) ) } overlaps(b) = { for(i = 1, oo, c = overlap([b^i, b^(i+1)-1], [(b+1)^i, (b+1)^(i+1)-1]); print(i" "c); if(c == 0, return(Set(res)) , listput(res, c) ) ) } tocheck() = {my(i); res = List(); for(i = 2, 8, overlaps(i) ); listsort(res, 1); res } minpossible(v, b) = { fromdigits(v, b) } \\this is where my oversight was :( maxpossible(v, b, {md = b-1}, {pos = 2}) = { fromdigits(v, b) + md*sum(i = pos, #v, (v[i]==0) * b^(#v-i)) } /* List([1, 2, 3, 4, 5, 6, 7, 9, 11, 17, 22, 31, 51, 22, 87, 51, 102, 91, 121, 212, 220, 248, 2601, 5258, 7491, 8283, 10516, 13541, 15774, 16566, 9831, 71500, 644765, 731445, 811518, 3552340, 314767045, 1427310725, 1848187230, 1916060910, 47124212513, 455075911977]) */