Davenport-Schinzel Dizisi oluşturun


11

Arka fon

Bir Davenport-Schinzel dizisi iki pozitif tam sayı parametreleri vardır dve n. Verilen parametreler için tüm Davenport-Schinzel dizilerinin kümesini göstereceğiz DS(d,n).

Doğal sayıların tüm dizileri düşünün 1için ntatmin dahil,:

  • Sekanstaki art arda iki sayı aynı değildir.
  • dİki farklı sayı arasında değişen uzunluktan daha büyük bir ardışık (zorunlu olarak ardışık değil) yoktur .

Izin Lböyle bir dizinin maksimum uzunluğunu belirtir (verilir dve n). Sonra, DS(d,n)bu tür tüm dizilerin uzunluğu ile kümesidir L.

Bazı örnekler yardımcı olabilir. Let d = 4, n = 3. Bu kısıtlamalarla mümkün olan en uzun diziler vardır L = 8. Yani aşağıdaki üyeler DS(4,3):

[1, 2, 1, 3, 1, 3, 2, 3]

Ardışık özdeş numaralar yoktur ve alternatif uzunluk alt dizileri vardır 4, ancak daha uzun olanlar değil:

 1  2  1           2
 1  2        1     2
 1        3  1  3
 1        3  1        3
    2     3        2  3
    2           3  2  3
       1  3  1  3
       1  3  1        3

Aşağıdaki örnekler değil de DS(4,3):

[1, 2, 2, 3, 1, 3, 2, 3]  # Two consecutive 2's.
[1, 2, 1, 3, 1, 3, 2, 1]  # Contains alternating subsequences of length 5.
[1, 2, 1, 3, 1, 3, 2]     # Longer valid sequences for d = 4, n = 3 exist.

Daha fazla bilgi için MathWorld ve OEIS ve listeledikleri referanslara bakınız .

Meydan okuma

Verilen iki pozitif tamsayı nve dherhangi bir Davenport-Schinzel dizisi oluşturun DS(d,n). Bunların genellikle benzersiz olmadığını unutmayın, bu nedenle geçerli herhangi bir sonuç alın.

STDIN (veya en yakın alternatif), komut satırı bağımsız değişkeni veya işlev bağımsız değişkeni ile girdi alarak ve sonucu işlevden döndürerek veya STDOUT'a (veya en yakın alternatife) yazdırarak bir program veya işlev yazabilirsiniz.

Çıktı için uygun, açık olmayan bir dize veya liste biçimi kullanabilirsiniz.

Bu kod golf, yani en kısa gönderme (bayt cinsinden) kazanır.

Dizi Uzunlukları

Diziler benzersiz olmadığından, bu zorlukta bireysel örnekler için fazla bir kullanım yoktur. Bununla birlikte, iki genel geçerlilik probleminin herhangi bir çıktıyı kontrol etmesi oldukça kolaydır, bu nedenle ana soru, dizinin doğru uzunluğa sahip olup olmadığı (veya daha uzun bir geçerli dizi olup olmadığı). Bu nedenle, verilen 1 L için bilinen bir liste dve n:

 \ 
 d\n 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
   \-----------------------------------------------------------
 1 | 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 2 | 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 3 | 1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
 4 | 1  4  8 12 17 22 27 32 37 42 47 53 58 64 69 75 81 86 92 98
 5 | 1  5 10 16 22 29 ...
 6 | 1  6 14 23 34 ...
 7 | 1  7 16 28 41 ...
 8 | 1  8 20 35 53 ...
 9 | 1  9 22 40 61 ...
10 | 1 10 26 47 73 ...

Bu tablodaki herhangi bir bilgiyi gönderiminize kodlamamalısınız.

1 Bu tablo 1994'ten beri, o zamandan beri daha fazla ilerleme kaydedilmiş olabilir, ancak herhangi bir sunumun bu tablodaki daha büyük girişleri bile makul bir süre içinde işleyebileceğinden şüpheliyim.

Yanıtlar:


2

Python 2: 172

from itertools import*
d,n=input();S=[[1]]
for s in S:
 for v in range(1,n+1):
  if(v!=s[-1])*all(w[2:]!=w[:-2]for w in combinations(s+[v],d+1)):S.append(s+[v])
print S[-1]

Girdi sadece biçimdedir 4, 3.

1İki özelliği ile başlayan ve tatmin eden tüm dizileri tekrar tekrar oluşturuyorum ve saklıyorum S. Bunları sıralı düzende oluşturduğumdan (uzunluğa [ve değerlere göre sıralanmış)), son girişin Davenport-Schinzel dizisi olması gerekir. Eklerken bir listeyi yineleyebileceğiniz hoş gerçeği kullanır.


Zaten python2 kullanıyorsanız, (iki boşluk olduğunu varsaydığım) bir sekmede birleştirerek bir bayt kaydedebilirsiniz. Yanlışsam düzelt.
Zacharý
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.