/* (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);