A335973 The Locomotive Pushing or Pulling its Wagons sequence (see comments for definition).
13, 24, 35, 46, 57, 68, 791, 202, 14, 25, 36, 47, 58, 691, 203, 15, 26, 37, 48, 591, 204, 16, 27, 38, 491, 205, 17, 28, 391, 206, 18, 291, 207, 181, 208, 191, 302, 131, 2002, 135, 461, 303, 141, 304, 151, 305, 161, 306, 171, 307, 182, 31, 2003, 142, 308, 192, 41, 2004, 152, 313, 241, 2005, 162, 51, 402
Offset: 1
Examples
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.
Links
- Carole Dubois, Table of n, a(n) for n = 1..5006
Crossrefs
Programs
-
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
Comments