OFFSET
1,1
COMMENTS
The lexicographically earliest sequence such that a(1),a(2),a(3),... is the (increasing) list of the positions of digits "9" in the string obtained by concatenating all these terms, written in base 10.
EXAMPLE
We cannot have a(1)=1 (since then there's no "9" in the first place), but a(1)=2 is possible.
This implies that a(2) must start with a digit "9", so a(2)=9 is the smallest possible choice.
This allows us to go on with a(3)=10, a(4)=11, a(5)=12, but then must be follow 4 digits "9" (the 9th through 12th digit of the sequence), so a(6)=99 and a(7)=990 are the smallest possible choices.
PROG
(PARI) concat([ [2, 9, 10, 11, 12, 99, 990], vector((99-11-1)\4, i, 1000-(i<=9)+i+(i>=19)), [1900], select(x->x%10-9 & x\10%10-9, vector((990-99)\4, i, 2000-1+i)) ])
/* The following code checks a sequence for consistency (i.e., the given digit occurs exactly at positions given by the terms), but it does not check the monotonicity neither the minimality.
In case of a contradiction, it returns [n, pos, d] where n is the index of the term, pos is the position in the concatenation, and d is the digit for which the contradiction occurred.
If d is different from the given digit, the term a(n) said that there should be that digit at position pos, but we found d instead.
If d equals the given digit, we found d at position pos, but the term a(n) said that the next d should occur elsewhere. */
check_self(a, d=9)={ my(t=Vecsmall(concat(concat([""], a))), c=0); d+=48;
for( i=1, #a, a[i]>#t & break; t[a[i]]==d || return([i, a[i], t[a[i]]-48]));
for( i=1, #t, t[i]==d & (a[c++ ]==I || return([c, i, d-48]))) /* no contradiction => empty result */}
CROSSREFS
KEYWORD
base,nonn
AUTHOR
M. F. Hasler, Nov 19 2009
STATUS
approved