OFFSET
1,1
COMMENTS
a(1) is the locomotive; a(2), a(3), a(4),... a(n),... are the wagons. To hook a wagon both to its predecessor (on the left) and successor (on the right) you must be able to insert the leftmost digit of a(n) between the last two digits of a(n-1) AND to insert the rightmost digit of a(n) between the first two digits of a(n+1). In mathematical terms, the value of the leftmost digit of a(n) must be between (not equal to) the last two digits of a(n-1) AND the value of the rightmost digit of a(n) must be between (not equal to) the first and the second digit of a(n+1). This is the lexicographically earliest sequence of distinct positive terms with this property.
a(n) cannot end in 0 or 9. - Michael S. Branicky, Dec 14 2020
LINKS
Carole Dubois, Table of n, a(n) for n = 1..5006
EXAMPLE
The sequence starts with 13, 24, 35, 46, 57, 68, 791, 202, 14,...
a(1) = 13 as there is no earliest possible locomotive;
a(2) = 24 starts with 2 and 4: now 2 < 3 < 4 [3 being the rightmost digit of a(1)] AND 3 < 4 < 5 [4 being the rightmost digit of a(2), 3 and 5 being the first two digits of a(3);
a(3) = 35 starts with 3 and 5: now 3 < 4 < 5 [4 being the rightmost digit of a(2)] AND 4 < 5 < 6 [5 being the rightmost digit of a(3), 4 and 6 being the first two digits of a(4);
a(4) = 46 starts with 4 and 6: now 4 < 5 < 6 [5 being the rightmost digit of a(3)] AND 5 < 6 < 7 [6 being the rightmost digit of a(4), 5 and 7 being the first two digits of a(5);
a(5) = 57 starts with 5 and 7: now 5 < 6 < 7 [6 being the rightmost digit of a(4)] AND 6 < 7 < 8 [7 being the rightmost digit of a(5), 6 and 8 being the first two digits of a(6);
a(6) = 68 starts with 6 and 8: now 6 < 7 < 8 [7 being the rightmost digit of a(5)] AND 7 < 8 < 9 [8 being the rightmost digit of a(6), 7 and 9 being the first two digits of a(7);
a(7) = 791 starts with 7 and 9: now 7 < 8 < 9 [8 being the rightmost digit of a(6)] AND 2 > 1 > 0 [1 being the rightmost digit of a(7); 2 and 0 being the first two digits of a(8); etc.
PROG
(Python)
def between(i, j, k):
return i < j < k or i > j > k
def dead_end(k):
rest, last = divmod(k, 10)
if last in {0, 9}: return True
return abs(rest%10 - last) <= 1
def aupto(n, seed=13):
train, used = [seed], {seed}
for n in range(2, n+1):
caboose = train[-1]
cabbody, cabhook = divmod(caboose, 10)
h1, h2 = sorted([cabbody%10, cabhook])
hooks = set(range(h1+1, h2))
pow10 = 10
an = min(hooks)*pow10
while an in used or dead_end(an): an += 1
hook = an//pow10
while True:
if hook in hooks:
if between(hook, cabhook, an//(pow10//10)%10):
train.append(an)
used.add(an)
break
else: pow10 *= 10
an = max(an+1, min(hooks)*pow10)
while an in used or dead_end(an): an += 1
hook = an//pow10
return train # use train[n-1] for a(n)
print(aupto(65)) # Michael S. Branicky, Dec 14 2020
CROSSREFS
KEYWORD
base,nonn
AUTHOR
Eric Angelini and Carole Dubois, Jul 03 2020
STATUS
approved