n 2、5 、または 6の徹底的な検索によって簡単に検証できるような任意のnのシーケンスはありません。
def check(t, n):
for i in range(1, n + 1):
p1 = t.index(i)
p2 = t.index(i, p1 + 1)
if p2 - p1 != i + 1:
return False
return True
assert check((2, 3, 1, 2, 1, 3), 3)
assert check((4, 1, 3, 1, 2, 4, 3, 2), 4)
def allseqs(n):
if n > 1:
for seq in allseqs(n - 1):
for i in range(len(seq) + 1):
for j in range(i, len(seq) + 1):
yield seq[:i] + (n,) + seq[i:j] + (n,) + seq[j:]
else:
if n == 1:
yield (1, 1)
else:
yield ()
def findseqs(n):
for p in allseqs(n):
if check(p, n):
print p
n=2、3、4、5 の結果:
>>> findseqs(2)
>>> findseqs(3)
(2, 3, 1, 2, 1, 3)
(3, 1, 2, 1, 3, 2)
>>> findseqs(4)
(2, 3, 4, 2, 1, 3, 1, 4)
(4, 1, 3, 1, 2, 4, 3, 2)
>>> findseqs(5)
>>> findseqs(6)
>>>
n=7 にはかなりの数の解がありますが、徹底的な検索には数分かかります。