OFFSET
0,3
COMMENTS
Self-inverse permutation of nonnegative numbers since a(a(n)) = n. - Michael S. Branicky, Sep 30 2025
LINKS
EXAMPLE
a(0) = 0, because lexicographically earliest term and a(a(n)) = n.
a(1) = 1, a(1) cannot be 0, because a(a(1)) = 1, then a(0) = 1, which is already given as a(0) = 0.
a(2) = 3, can neither be 0 or 1, nor 2, because a(1)-a(0) = 1.
a(3) = 2, because a(a(3)) = 3 and a(a(2)) = 2.
PROG
(Python)
from itertools import count, islice
def agen(): # generator of terms
a, diffs = {0:0}, set(); yield 0
for n in count(1):
if n in a:
an = a[n]
else:
an = n
while True:
while an-a[n-1] in diffs or an in a:
an += 1
b = {k: a[k] for k in {n-1, n+1, an-1, an+1} if k in a}
b[n], b[an] = an, n
newdiffs = [b[k+1]-b[k] for k in b if k+1 in b]
s = set(newdiffs)
if len(newdiffs) == len(s) and diffs & s == set():
break
an += 1
a[n], a[an] = an, n
diffs |= s
yield an
print(list(islice(agen(), 68))) # Michael S. Branicky, Sep 25 2025
(Python)
def okseq(lst): # test whether initial list of values verifies constraints
b = {k: lst[k] for k in range(len(lst))}
diffs = [b[k+1]-b[k] for k in b if k+1 in b]
return len(diffs) == len(set(diffs)) and all(b[b[k]] == k for k in b if b[k] in b)
assert okseq(list(islice(agen(), 68))) # Michael S. Branicky, Sep 26 2025
CROSSREFS
KEYWORD
nonn
AUTHOR
Marc Morgenegg, Sep 25 2025
EXTENSIONS
a(18) onward from Michael S. Branicky, Sep 25 2025
STATUS
approved
