# Python program for OEIS A159453 # Michael S Branicky, Feb 13 2024 # A159453 Smallest numbers containing exactly n smaller numbers when written as English number names. 1 data = [0, 14, 21, 61, 414, 114, 122, 161, 162, 4414, 1114, 1122, 1223, 1161, 1162, 1263] # (Python) from num2words import num2words from itertools import count, islice def n2w(n): map = {ord(c): None for c in "-, "} return num2words(n).replace(" and", "").translate(map) def f(n, W): w = n2w(n) return len(set(w[i:j] for i in range(len(w)-1) for j in range(i+1, len(w)+1) if w[i:j] in W)) def agen(): # generator of terms W, adict, n = {"zero"}, {0:0}, 0 for m in count(0, 100): w0 = n2w(m) if m > 0 else "" L0 = len(w0) s0 = set(w0[i:j] for i in range(L0) for j in range(i+1, L0+1) if w0[i:j] in W) v0 = len(s0) if v0 not in adict: adict[v0] = m if m > 0: W.add(w0) for d in range(1, 100): wd = w0 + n2w(d) Ld = len(wd) vd = len(s0 | set(wd[i:j] for i in range(Ld) for j in range(L0, Ld+1) if wd[i:j] in W)) if vd not in adict: adict[vd] = m+d W.add(wd) while n in adict: yield adict[n]; n += 1 print(list(islice(agen(), 24))) # ~~~~ print(data) from time import time time0 = time() alst = [] g = agen() for n in range(10001): an = next(g) alst.append(an) print(n, an, len(str(alst))-2, time()-time0, alst) with open("b159453.txt", "a") as bfile: bfile.write(f"{n} {an}\n")