二进制重复序列


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)where k > n)的序列)。由于这一结果,xy会一直是积极的。
  • 输入和输出将始终是整数,在语言的自然整数类型的范围内。如果您的语言具有无界整数,则输入和输出将在该范围内[2**31, 2**31-1](即32位带符号二进制补码整数的范围)。
  • 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

好的,谢谢您的澄清。
丹尼斯

Answers:


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)

直接递归解决方案。除n作为函数参数外,所有输入均取自STDIN ,默认情况下允许分割(尽管有争议)。

似乎没有一种保存字节的方法来and/or代替,if/else因为l[n]可能会将false设置为0。



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个字节。

编辑:由于@Mego指出我节省了7个字节,因此我忽略了传入的数组始终包含结果的第一个y元素。


@Mego我知道我经常忽略一些问题的细节,但是这个问题让我感到特别微妙。
尼尔

2

Haskell,54 48字节

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

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.