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.

A372704 a(1)=1; a(2)=2; for n>1, this is the lexicographically earliest sequence such that, following each occurrence of a(n), a(n) is banned for the next k terms, where k is the number of terms prior to a(n) that are not equal to a(n).

Original entry on oeis.org

1, 2, 1, 2, 1, 3, 2, 1, 4, 5, 6, 2, 1, 3, 7, 8, 9, 4, 10, 5, 2, 1, 6, 11, 12, 13, 3, 14, 15, 7, 16, 8, 17, 9, 4, 18, 19, 2, 1, 5, 10, 20, 21, 22, 6, 23, 24, 11, 25, 12, 26, 3, 13, 27, 28, 14, 29, 15, 7, 30, 31, 16, 8, 32, 33, 17, 9, 4, 34, 35, 2, 1, 18, 19, 36
Offset: 1

Views

Author

Neal Gersh Tolunsky, May 10 2024

Keywords

Comments

1 occurs immediately after its ban ends so that the i-th occurrence of a(n) = 1, for i >= 2, is at n = 2^(i-2) + i = A052968(i-1).
2 occurs immediately after its ban ends, since it turns out that's immediately before the ban on 1 ends, so the i-th occurrence of a(n) = 2 is at n = 2^(i-1) + i = A005126(i-1).
If the definition is changed so that k is the number of terms in the sequence thus far equal to a(n) (rather than unequal), this becomes A002260 without the initial 1.

Examples

			  a(n)   ban 1  2  3  4  5  6 ...
   1         |  |  |  |  |  |
   2         |  |  |  |  |  |
   1         |  x  |  |  |  |
   2         x  |  |  |  |  |
   1         |  x  |  |  |  |
   3         x  x  |  |  |  |
   2         x  |  x  |  |  |
   1         |  x  x  |  |  |
   4         x  x  x  |  |  |
   5         x  x  x  x  |  |
   6         x  x  x  x  x  |
   2         x  |  |  x  x  x
   1         |  x  |  x  x  x
   3         x  x  x  x  x  x
		

Crossrefs

Programs

  • Python
    from collections import Counter
    from itertools import count, islice
    def agen(): # generator of terms
        an, ban, occurs = 1, {1: 1}, Counter([1])
        for n in count(2):
            yield an
            an = next(k for k in count(1) if k not in ban)
            for k in list(ban):
                if ban[k] > 1: ban[k] -= 1
                else: del ban[k]
            ban[an] = n - 1 - occurs[an]
            occurs[an] += 1
    print(list(islice(agen(), 75))) # Michael S. Branicky, May 10 2024

Extensions

a(20) and beyond from Michael S. Branicky, May 10 2024