A367810 Lexicographically earliest sequence of distinct positive terms not ending in 0 such that the Levenshtein distance (Ld) between a(n) and a(n+1) is equal to the last digit of a(n).
1, 2, 11, 12, 3, 101, 102, 13, 201, 21, 22, 4, 1001, 1002, 103, 5, 10001, 10002, 1003, 14, 2001, 2002, 203, 6, 100001, 100002, 10003, 104, 2211, 211, 111, 112, 15, 20001, 20002, 202, 23, 105, 22211, 2221, 221, 121, 122, 16, 200001, 200002, 20003, 204, 1111, 1011, 1012, 106, 222211, 22221, 2222, 212, 17
Offset: 1
Examples
a(1) = 1 and a(2) = 2 are separated by an Ld of 1, and 1 is the last digit of a(1) a(2) = 2 and a(3) = 11 are separated by an Ld of 2, and 2 is the last digit of a(2) a(3) = 11 and a(4) = 12 are separated by an Ld of 1, and 1 is the last digit of a(3) a(4) = 12 and a(5) = 3 are separated by an Ld of 2, and 2 is the last digit of a(4) a(5) = 3 and a(6) = 101 are separated by an Ld of 3, and 3 is the last digit of a(5), etc.
Links
- Éric Angelini, More Levenshtein distances, Personal blog, December 2023.
Crossrefs
Cf. A367638.
Programs
-
Mathematica
a[1]=1;a[n_]:=a[n]=(k=1; While[MemberQ[Array[a,n-1],k] ||Mod[k,10]==0|| EditDistance[ToString@a[n-1],ToString@k]!= Mod[a[n-1],10],k++];k);Array[a,40]
-
Python
from itertools import islice from Levenshtein import distance as Ld def agen(): # generator of terms an, aset, mink = 1, {1}, 2 while True: yield an s, k = str(an), mink target = int(s[-1]) while k%10 == 0 or k in aset or Ld(s, str(k)) != target: k += 1 an = k aset.add(k) while mink in aset or mink%10 == 0: mink += 1 print(list(islice(agen(), 57))) # Michael S. Branicky, Dec 01 2023
Comments