バイナリ繰り返しシーケンス


10

バイナリ再帰シーケンスは、次の形式の再帰的に定義されたシーケンスです。

バイナリ繰り返しシーケンスの定義

これは、フィボナッチ(x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1)シーケンスとルーカス(x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1)シーケンスの一般化です。

チャレンジ

所与nxyaalpha、およびbeta、任意の合理的な形式で、出力n対応するバイナリ再発配列の第用語。

ルール

  • シーケンスを1インデックス付きまたは0インデックス付きのどちらにするかを選択できますが、選択はすべての入力にわたって一貫している必要があり、回答ではその選択を記録する必要があります。
  • あなたは無効な入力が(そのような従来の終了シーケンスとして与えられないであろうことを仮定してもよいnの参照は次のように、用語を未定義こと、またはシーケンスF(-1)またはF(k)場所k > n)。この結果として、xそしてy常にポジティブになります。
  • 入力と出力は常に整数であり、言語の自然な整数型の範囲内です。言語に制限のない整数がある場合、入力と出力は範囲[2**31, 2**31-1](つまり、32ビットの符号付き2の補数の整数の範囲)内にあります。
  • a常に正確にy値が含まれます(定義に従って)。

テストケース

注:すべてのテストケースのインデックスは0です。

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

a逆の順序で取り込むことは合理的と見なされますか?
デニス

@デニスはい、そうです。
Mego

わかりました。ありがとうございます。
デニス

回答:


2

ゼリー、11 バイト

⁴Cịæ.⁵ṭµ¡⁶ị

オンラインでお試しください!  1  |  2  |  3  |  4  |  5 

使い方

⁴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バイト

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

直接再帰的なソリューション。すべての入力には、以外のSTDINから取られているn関数の引数として、だ分割がされ、デフォルトで許可されている(ただしcontentiously)。

and/or代わりにバイトを保存する方法はないようです。なぜなら、0と偽る可能性があるif/elseからl[n]です。



2

JavaScript(ES6)、51 44バイト

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

関数は部分的にカリー化されていることに注意してください(例:f(1,2,[1,1],1,1)(8)34を返します)。中間関数を互いに独立させるには2バイトかかります(現在、最後に生成された関数のみが正しく機能します)。

編集:渡された配列には常にy結果の最初の要素が含まれていることを私が見逃していたことを指摘した@Megoのおかげで7バイトが節約されました。


@Mego質問の詳細を見落としがちですが、特に微妙だと思いました。
Neil、


0

J、43バイト

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

Aの初期シーケンスが与えられると、xyαβのパラメーターを使用して次の項をn回計算します。その後、拡張シーケンスのn 番目の項を選択し、結果として出力します。

使用法

Jは1つまたは2つの引数しかサポートしないため、すべてのパラメーターをボックス化されたリストのリストとしてグループ化します。最初のシード値Aが最初で、xyのパラメーターがリストとして続き、次にαβのパラメーターがリストとして続き、値nで終わります。

   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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.