İkili Tekrarlama Dizileri


10

İkili bir yineleme dizisi, aşağıdaki formun yinelemeli olarak tanımlanmış bir dizisidir:

ikili yineleme sırası tanımı

Bu, Fibonacci ( x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1) sekansının ve Lucas ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1) sekansının genelleştirilmesidir .

Meydan okuma

Verilen n, x, y, a, alpha, ve betaherhangi bir uygun biçimde, çıkış nkarşılık gelen ikili tekrar dizisinin inci terim.

kurallar

  • Dizinin 1 dizinli veya 0 dizinli olmasını seçebilirsiniz, ancak seçiminizin tüm girdiler arasında tutarlı olması gerekir ve yanıtınızda seçiminizi not etmelisiniz.
  • Hiçbir geçersiz giriş verilmeyeceğini varsayabilirsiniz (örneğin, öncesinde sona eren nbir dizi veya tanımlanamayan terimlere (örneğin F(-1)veya F(k)nerede k > n) başvuran bir dizi gibi ). Bunun bir sonucu olarak xve yher zaman olumlu olacaktır.
  • Girişler ve çıkışlar, dilinizin doğal tamsayı türünün sınırları dahilinde daima tamsayı olur. Dilinizde sınırsız tamsayı varsa, girişler ve çıkışlar aralık dahilinde olacaktır [2**31, 2**31-1](yani 32 bit imzalı iki tamsayı tamamlayıcısı için aralık).
  • aher zaman tam olarak ydeğerler içerecektir (tanıma göre).

Test Durumları

Not: tüm test senaryoları 0 dizinlidir.

x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1, n = 6 => 13
x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1, n = 8 => 47
x = 3, y = 5, a = [2, 3, 5, 7, 11], alpha = 2, beta = 3, n = 8 => 53
x = 1, y = 3, a = [-5, 2, 3], alpha = 1, beta = 2, n = 10 => -67
x = 5, y = 7, a = [-5, 2, 3, -7, -8, 1, -9], alpha = -10, beta = -7, n = 10 => 39

aTers sırada sipariş almak makul sayılır mı?
Dennis

@Dennis Evet, var.
Mego

Tamam, açıkladığın için teşekkürler.
Dennis

Yanıtlar:


2

Jöle , 11 bayt

⁴Cịæ.⁵ṭµ¡⁶ị

Çevrimiçi deneyin!  1  |  2  |  3  |  4  |  5 

Nasıl çalışır

⁴Cịæ.⁵ṭµ¡⁶ị  Main link. Arguments: a; [x, y]; [α, β]; n (1-based)

       µ     Combine the links to the left into a chain.
        ¡    Execute that chain n times, updating a after each execution.
⁴              Yield [x, y].
 C             Complement; yield [1 - x, 1 - y].
  ị            Retrieve the elements of a at those indices.
               Indexing is 1-based and modular in Jelly, so this retrieves
               [a[-x], a[-y]] (Python syntax).
     ⁵         Yield [α, β].
   æ.          Take the dot product of [a[-x], a[-y]] and [α, β].
         ⁶   Yield n.
          ị  Retrieve the element of a at index n.

2

Python 2, 62 bayt

x,y,l,a,b=input();f=lambda n:l[n]if n<y else a*f(n-x)+b*f(n-y)

Doğrudan özyinelemeli bir çözüm. nBir işlev argümanı olarak varsayılan olarak izin verilen bir bölünme (çekişmeli olsa da) dışında tüm girdiler STDIN'den alınır .

Baytları and/oryerine kaydetmenin bir yolu yok gibi görünüyor if/elseçünkü l[n]0 gibi falsey olabilir.


2

Python 2, 59 bayt

x,y,A,a,b,n=input()
exec'A+=a*A[-x]+b*A[-y],;'*n
print A[n]

Ideone üzerinde test edin .


2

JavaScript (ES6), 51 44 bayt

(x,y,z,a,b)=>g=n=>n<y?z[n]:a*g(n-x)+b*g(n-y)

İşlevin kısmen kıvrılmış olduğunu, örneğin f(1,2,[1,1],1,1)(8)34 değerini döndürdüğünü unutmayın. Ara işlevleri birbirinden bağımsız hale getirmek 2 bayta mal olur (şu anda yalnızca son oluşturulan işlev düzgün çalışır).

Düzenleme: @Mego, geçirilen dizinin her zaman ysonucun ilk öğelerini içerdiğini göz ardı ettiğine işaret ederek 7 bayt kaydetti .


@Mego Sık sık soruların ayrıntılarını göz ardı ettiğimi biliyorum ama bu bana çok ince geldi.
Neil

2

Haskell, 54 48 bayt

l@(x,y,a,p,q)%n|n<y=a!!n|k<-(n-)=p*l%k x+q*l%k y

0

J, 43 bayt

{:{](],(2>@{[)+/ .*]{~1-@>@{[)^:(3>@{[)>@{.

Terimlerin bir başlangıç sekansı verilen bir gelecek dönem, hesaplar n parametreleri kullanılarak katı x , y , a , ve p . Daha sonra, seçen olarak N inci sonucu uzatılmış dizi ve çıkışları içinde terimi.

kullanım

J yalnızca 1 veya 2 bağımsız değişkeni desteklediğinden, tüm parametreleri kutulu listelerin listesi olarak gruplandırırım. İlk tohum değerleri A ilk önce bir liste olarak x ve y parametrelerini, ardından bir liste olarak a ve β parametrelerini takip eder ve n değeri ile biter .

   f =: {:{](],(2>@{[)+/ .*]{~1-@>@{[)^:(3>@{[)>@{.
   2 3 5 7 11;3 5;2 3;8
┌──────────┬───┬───┬─┐
│2 3 5 7 11│3 5│2 3│8│
└──────────┴───┴───┴─┘
   f 2 3 5 7 11;3 5;2 3;8
53
   f _5 2 3 _7 _8 1 _9;5 7;_10 _7;10
39
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.