/*      wdigits.js (script en ligne de commande :    js -e "c=1;limite=100" -f wdigits.js)
        Suites digitales autodescriptives de type II
        Jean-Paul Davalan   (C) 2009
        http://jeux-et-mathematiques.davalan.org/mots/suites/digitposition/index.html

        Référence pour l'origine de ces suites : Éric Angelini
        http://www.cetteadressecomportecinquantesignes.com/DigitPosition.htm
*/
function was(x, lim) {
if(x<1||x>9) return "";
x = parseInt(x);
var car =""+x, deb=0, bits = [], u = [], ru=[],s = [], p = [];
u[0]=0;s[0]="0";p[0]=0;ru[0]=0;
function suivant(n) {
	var k, l = s[n].length;
	p[n+1] = p[n] + l;
	for(k=1;! compatible(k, p[n+1]);k++) ;
	bits[k]=car; u[n+1]=k;s[n+1] = ""+k;ru[k]=n+1;
	for(var i=0; i<s[n+1].length; i++)
		if(s[n+1].charAt(i)==car)
			bits[p[n+1]+i]=car;
	return k;
}
function compatible(k, p) {
	var r = ""+k;
	if(ru[k]!=null) return false;
	if(k<p) {
		if(bits[k]==null) return false;
		else {
			for(var i=0; i<r.length; i++)
				if(bits[p+i]!=null && r.charAt(i)!=car)
					return false;
			return true;
		}
	}
	if(car=="0" && bits[p+r.length]==car) return false;
	for(var i=0; i<r.length; i++)  {
		if(( p+i == k && r.charAt(i)!=car )|| (bits[p+i]!=null && r.charAt(i)!=car))
			return false;
	}
	return true;
}
for(var i=deb; i<lim; i++)  suivant(i);
var st = "Suite u_"+x+"(n) pour c="+x+"  jusqu'à n="+lim+"\n"
for(var i=1; i<=lim;i++) st += u[i]+((i<lim)?", ":"");
return st;
}
/* ------------------------------------------------------------ */
if(limite==null)
	limite=100
if(c==null || c<1 || c>9)
	c=1
print(was(c,limite))

