cp's OEIS Frontend

This is a front-end for the Online Encyclopedia of Integer Sequences, made by Christian Perfect. The idea is to provide OEIS entries in non-ancient HTML, and then to think about how they're presented visually. The source code is on GitHub.

A343462 Number of n-digit positive integers that undulate.

Original entry on oeis.org

9, 81, 525, 3105, 18939, 114381, 693129, 4195557, 25405586, 153820395, 931359050, 5639156409, 34143908573, 206733865761, 1251728824798, 7578945799704, 45888871327435, 277847147039527, 1682304127857000, 10185986079451152, 61673933253012813, 373422269794761171, 2260990733622821388
Offset: 1

Views

Author

David A. Corneth, Apr 16 2021

Keywords

Comments

This is also the number of (2*n-1)-digit palindromes that undulate.
Classifying undulating numbers with n digits in initial digits and sign of first digit - second digit eases computation.

Examples

			a(2) = 81 as there are 90 2-digit positive integers (10, 11, ..., 99). Of those, 11, 22, ..., 99 do not undulate as there is a pair of consecutive digits that are equal. There are nine nonundulating 2-digit numbers, leaving 90-9 = 81 that do undulate.
134 does not undulate as there are two pairs of consecutive digits where the right one is in both cases either smaller or larger. (In this case 1 < 3 and 3 < 4.)
143 does undulate since 1 < 4 and 4 > 3.
		

Crossrefs

Cf. A057332. Apart from the first 2 terms, the same as A152464.

Programs

  • PARI
    first(n) = { my(res = vector(n), vup, vdown, nvup, nvdown); res[1] = 9; vup = vector(9, i, 1); vdown = vector(9, i, 1); for(i = 2, n, nvup = vector(9); nvdown = vector(9); nvdown[1] = vdown[9]; for(i = 2, 9, nvdown[i] = nvdown[i-1]+vup[i-1] ); for(i = 1, 8, nvup[i] = nvdown[9-i] ); vup = nvup; vdown = nvdown; res[i] = vecsum(vup)+vecsum(vdown)); res }
    
  • Python
    def aupton(terms):
      up, dn, alst = [0] + [1]*9, [0] + [1]*9, [9]
      for n in range(2, terms+1):
        up_next = [sum(dn[j] for j in range(i)) for i in range(10)]
        dn_next = [sum(up[j] for j in range(i+1, 10)) for i in range(10)]
        up, dn = up_next, dn_next
        alst.append(sum(up + dn))
      return alst
    print(aupton(22)) # Michael S. Branicky, Apr 16 2021
    
  • Python
    # alternate program as a linear system
    import numpy as np
    from sympy import Matrix
    def aupton(terms):
      x = Matrix([0] + [1]*9 + [0] + [1]*9)
      c = Matrix([[1]*20])
      z10 = np.zeros((10, 10), dtype=np.int64)
      o10 = np.ones((10, 10), dtype=np.int64)
      A = Matrix(np.block([[z10, np.tril(o10, -1)], [np.triu(o10, +1), z10]]))
      alst = [9]
      for n in range(2, terms+1):
        x = A*x
        alst.append((c*x)[0])
      return alst
    print(aupton(22)) # Michael S. Branicky, Apr 16 2021

Formula

a(n) = 45*a(n-2) - 330*a(n-4) + 924*a(n-6) - 1287*a(n-8) + 1001*a(n-10) - 455*a(n-12) + 120*a(n-14) - 17*a(n-16) + a(n-18) for n >= 20. - Michael S. Branicky, Apr 17 2021
From Chai Wah Wu, Apr 24 2021: (Start)
a(n) = 5*a(n-1) + 10*a(n-2) - 20*a(n-3) - 15*a(n-4) + 21*a(n-5) + 7*a(n-6) - 8*a(n-7) - a(n-8) + a(n-9) for n > 10.
G.f.: x*(-8*x^9 + 7*x^8 + 63*x^7 - 45*x^6 - 162*x^5 + 81*x^4 + 150*x^3 - 30*x^2 - 36*x - 9)/(x^9 - x^8 - 8*x^7 + 7*x^6 + 21*x^5 - 15*x^4 - 20*x^3 + 10*x^2 + 5*x - 1). (End)