login
a(1)=1; thereafter a(n) is the smallest k for which the subsequence a(n-k..n-1) has a distinct sequence of first differences from that of any other subsequence of the sequence thus far.
3

%I #11 Nov 02 2024 00:05:33

%S 1,1,2,2,3,4,3,2,3,3,4,5,6,4,2,3,3,4,5,6,7,5,6,4,4,3,3,3,3,4,4,5,6,7,

%T 7,4,2,3,4,4,5,5,5,4,4,5,4,4,4,5,5,6,7,8,9,8,5,3,4,5,6,5,6,4,4,5,4,5,

%U 5,5,5,5,5,6,6,7,8,9,10,10,6,2,3,3,4,5,6,7

%N a(1)=1; thereafter a(n) is the smallest k for which the subsequence a(n-k..n-1) has a distinct sequence of first differences from that of any other subsequence of the sequence thus far.

%C In other words, a(n) is the length of the shortest subsequence ending at a(n-1) which has unique first differences among all first differences of subsequences of the sequence thus far.

%H Neal Gersh Tolunsky, <a href="/A375207/b375207.txt">Table of n, a(n) for n = 1..10000</a>

%H Neal Gersh Tolunsky, <a href="/A375207/a375207.png">Ordinal Transform of 500000 terms</a>

%e a(8)=2 because the length-2 subsequence a(6..7) = 4,3 has the shortest unique first differences (-1) of any other subsequence in the sequence thus far.

%e a(9)=3 because the length-3 subsequence a(6..8) = 4,3,2 likewise has the shortest unique first differences (-1,-1). No shorter subsequence ending in a(8) with unique first differences exists in the sequence thus far. We cannot have, for example, a(7..8) = 3,2 since we saw a subsequence with the same first differences in the previous example, where a(6..7) = 4,3 has first difference (-1).

%o (Python)

%o from itertools import count, islice

%o def fd(t): return tuple(t[i]-t[i-1] for i in range(1, len(t)))

%o def agen(): # generator of terms

%o a, R, maxL = [1], set(), 0 # maxL = max length of first diff.'s stored

%o for n in count(1):

%o yield a[-1]

%o for k in range(1, n+1):

%o if k > maxL: # must increase length of first diff.'s stored

%o maxL += 1

%o R.update(fd(a[i:i+maxL]) for i in range(n-maxL))

%o if fd(a[-k:]) not in R:

%o break

%o an = k

%o R.update(fd(a[-i:]) for i in range(1, maxL+1))

%o a.append(an)

%o print(list(islice(agen(), 90))) # _Michael S. Branicky_, Oct 16 2024

%Y Cf. A377079, A376937.

%K nonn

%O 1,3

%A _Neal Gersh Tolunsky_, Oct 16 2024