/* (PARI) R. J. Cano, Apr 15 2018 * Sequencer program suitable for * all those sequences mentioned * below as OEIS.org A-numbers; * */ Digits(x,B)=if(!x,[0],digits(x,B)); /* Due digits(0,B) returns [] for any B */ firstTerms(m,{B=10},{initial=[]},{persist=[]},{pattern1=[]},{pattern2=[]})={ /* Must be: B>1, persist <= #initial < B and 0 <= initial[k] < B */ if(initial==[],initial=[0,1,2,3]); if(pattern1==[],pattern1=vector(#initial,u,1)); if(#persist&&(pattern2==[]),pattern2=vector(#persist,u,1)); my(Reset=vector(B,u,1)); my(Seq=vector(m),alldigits=vector(B,u,u-1),allowed=Reset,Copy=vector(B),t,Ok,Erase=[],x=vector(#persist),flag=Vecsmall(0,10*m)); for(k=1,#initial,Seq[k]=initial[k]); for(i=1,#initial,allowed[setsearch(alldigits,initial[i])]=0); for(k=1,#initial,flag[initial[k]+1]=1); if(#persist, for(k=1,#persist, x[k]=initial[#initial-persist[k]+1]; allowed[setsearch(alldigits,x[k])]=1; ) ); for(i=1+#initial,m, Copy*=0; t=0; for(k=1,B,if(allowed[k],Copy[t++]=alldigits[k])); for(j=1,oo, forvec(y=vector(j,u,[1,vecsum(allowed)]), Ok=1; if(#persist, Ok=0; for(r=1,#persist, for(k=1,j, if(x[r]==Copy[y[k]], if(Ok++==#persist, break(2) ) ) ) ) ); if(Ok, t=fromdigits(vector(#y,k,Copy[y[k]]),B); Ok=!flag[t+1]; ); if(Ok, Seq[i]=t; flag[t+1]=1; allowed=Reset; Erase=[]; for(k=0,#initial-1, if(!pattern1[#initial-k], Erase=concat(Erase,Digits(Seq[i-k],B)) ) ); Erase=Set(Erase); for(k=1,#Erase,allowed[setsearch(alldigits,Erase[k])]=0); if(#persist, for(r=1,#persist, t=Digits(Seq[i-persist[r]+1],B); x[r]=if(pattern2[r],vecmax(t),vecmin(t)); allowed[setsearch(alldigits,x[r])]=1 ) ); break(2) ) ) ) ); return(Seq) } /* Supported OEIS sequences by A-number: */ A067581(m)=firstTerms(m,10,[0],[],[0]); A276512(m)=firstTerms(m,10,[0,1],[],[0,1]); A276633(m)=firstTerms(m,10,[0,1],[],[0,0]); A286890(m)=firstTerms(m,10,[1],[1]); A298482(m)=firstTerms(m,10,[0,1,2],[],[0,0,0]); A300907(m)=firstTerms(m,10,[1,2],[2],[1,1]); A301801(m)=firstTerms(m,10,[0,1,2,3],[],[0,0,0,0]); A302388(m)=firstTerms(m,10,[1,2,3],[3],[1,1,1],[1]); A302566_version_1(m)=firstTerms(m,10,[1,2],[2],[1,0],[1]); A302566_version_2(m)=firstTerms(m,10,[2,1],[2],[1,0],[1]); /* Must match version 1 from 13th term onward. */ A302566(m)=A302566_version_1(m);