新订单5:斐波那契和比蒂在Wythoff会合的地方


16

简介(可以忽略)

将所有正数按其常规顺序(1、2、3,...)有点无聊,不是吗?因此,这是围绕所有正数的排列(重新排列)的一系列挑战。这是本系列的第五个挑战(链接到第一第二第三第四挑战)。

在这个挑战中,我们将遇到Wythoff数组,这是斐波那契序列和Beatty序列相互交织的雪崩

斐波那契数都可能是你最众所周知的序列。给定两个起始数字和,则以下给出:对于。F0F1FnFn=F(n1)+F(n2)n>2

给定参数的Beatty序列为:对于。Beatty序列的特性之一是,对于每个参数,都只有一个参数,因此这些参数的Beatty序列是离散的连接在一起,它们跨越所有自然数,但不包括0(例如:)。rBnr=rnn1个[Rs=r/[R-1个Br[R/[R-1个=ñ{0}

现在是令人兴奋的部分:您可以创建一个数组,其中每行是斐波那契数列每列是Beatty 数列。该数组是Wythoff数组。最好的部分是:每个正数在此数组中仅出现一次!该数组如下所示:

   1    2    3    5    8   13   21   34   55   89  144 ...
   4    7   11   18   29   47   76  123  199  322  521 ...
   6   10   16   26   42   68  110  178  288  466  754 ...
   9   15   24   39   63  102  165  267  432  699 1131 ...
  12   20   32   52   84  136  220  356  576  932 1508 ...
  14   23   37   60   97  157  254  411  665 1076 1741 ...
  17   28   45   73  118  191  309  500  809 1309 2118 ...
  19   31   50   81  131  212  343  555  898 1453 2351 ...
  22   36   58   94  152  246  398  644 1042 1686 2728 ...
  25   41   66  107  173  280  453  733 1186 1919 3105 ...
  27   44   71  115  186  301  487  788 1275 2063 3338 ...
  ...

第行和第列的元素定义为:mn

Am,n={mφφ if n=1mφφ2 if n=2Am,n2+Am,n1 if n>2

其中是黄金分割率:\ varphi = \ frac {1+ \ sqrt {5}} {2}φφ=1+52

如果我们遵循此数组的反对角线,则会得到A035513,它是此挑战的目标序列(请注意,该序列已由Neil Sloane本人添加到OEIS中!)。由于这是一个“纯序列”质询,因此任务是针对给定的输出作为输入,其中是A035513a(n)na(n)

您可以遵循不同的策略来获得,这使这个挑战(在我看来)确实很有趣。a(n)

任务

给定一个整数输入,以整数格式输出,其中是A035513na(n)a(n)

注意:此处假定基于1的索引;您可以使用基于0的索引,因此,等等。如果您选择使用它,请在答案中提及。a(0)=1;a(1)=2

测试用例

Input | Output
---------------
1     |  1
5     |  7
20    |  20
50    |  136
78    |  30
123   |  3194
1234  |  8212236486
3000  |  814
9999  |  108240
29890 |  637

这可能是有趣的知道,最大的为是a(n)1n32767a(32642)=512653048485188394162163283930413917147479973138989971=F(256)2φ+F(255).

规则

  • 输入和输出是整数
  • 您的程序至少应支持1到32767之间的输入。请注意,在此范围内,最多可以增加30位数字...a(n)
  • 无效的输入(0,浮点数,字符串,负值等)可能会导致意外的输出,错误或(未定义的)行为。
  • 默认的I / O规则适用。
  • 禁止默认漏洞
  • 这是,因此最短答案以字节为单位

2
那么,这里的新订单参考是什么?
Luis Mendo

2
@LuisMendo:斐波那契和比蒂序列的雪崩,形成了Wythoff数组...
agtoever

啊,我完全错过了!现在我感到后悔 ...
Luis Mendo

1
phi(或rt(5))的浮点表示形式以及递归的应用是否可以满足范围要求?
乔纳森·艾伦,

1
请修复第9个测试用例:999并非如此9999
J42161217 '19

Answers:


4

果冻27 24字节

p`SÞ⁸ịð’;×ØpḞ¥×⁹r‘ÆḞ¤Sð/

在线尝试!

Monadic链接使用基于1的索引。感谢@JonathanAllan提供了一种获取行和列n并节省3个字节的更好方法。以最短的形式,它对于TIO上的较大n来说太慢了,因此下面的内容可以在线尝试!减少了行和列的初始列表的大小,但花费了三个字节。

说明

p`                       | Cartesian product of the range from 1..input with itself   
  SÞ                     | Sort by sum
    ⁸ị                   | Find the tuple at the position indicated by the input - this is the row and column
      ð               ð/ | Start a new dyadic chain using the row as the left and column as the right argument
       ’                 | Increase the row by 1
        ;    ¥           | Concatenate to:
         ×Øp             |   row × φ
            Ḟ            |   rounded down
              ×     ¤    | Multiply this pair by
                  ÆḞ     |   the Fibonacci numbers at positions
               ⁹         |   column index and
                r‘       |   column index plus one
                     S   | sum

请注意,这是基于OEIS页面上Python代码的描述。


1
...×⁹r‘ÆḞ¤Sð/在您的合并版本(TIO)中保存一个
Jonathan Allan

6

[R 143个 130 124 123字节

function(n){k=0:n+1
`~`=rbind
m=k-1~(k*(1+5^.5)/2)%/%1
for(i in k)m=m~m[i,]+m[i+1,]
m=m[-1:-2,]
m[order(row(m)+col(m))][n]}

在线尝试!

Ťñ-1个=ñ-1个;Ťñ0=ñϕ;Ťñķ=Ťñķ-1个+Ťñķ-2splitsk仅存在于防止drop=Fm[-1:-2,]这种情况下强制争论n=1

感谢尼尔指出1字节高尔夫。

[R 150个 138 132字节

function(n){T[2]=1
for(j in 2:n-1)T=c(T,T[j]+T[j+1])
m=T[-1]%o%((1:n*(.5+5^.5/2))%/%1)+T[-1-n]%o%(1:n-1)
m[order(row(m)+col(m))][n]}

在线尝试!

T(n,k)=Fib(k+1)nϕ+Fib(k)(n1splitsnth

感谢Robin Ryder提供了T[2]=1生成斐波那契数列的技巧。


两种解决方案的效率都非常低,创建一个nxn(最有可能的)doubles 矩阵,因为R 在溢出时integerdouble自动提升(32位带符号),但是第二种解决方案应该要快得多。以n作为BIGNUM应该自动工作,使用呼叫gmp::as.bigz(n),应在精度损失doubleS为令人担忧,然后语言会R + gmp


可以(1+5^.5)/2代替使用(.5+5^.5/2)吗?
尼尔,

@尼尔...是的,我可以。谢谢!除非我能找到一种方法使第二个球杆下降很多,否则只能将其编辑为前一个球杆。
朱塞佩



2

木炭,54字节

Nθ≔⁰ηW‹ηθ«≦⊕η≧⁻ηθ»⊞υ¹Fθ⊞υ⁻⁺³ι§υ⊖§υι⊞υθF⁺²⁻θη⊞υΣ…⮌υ²I⊟υ

在线尝试!链接是详细版本的代码。0索引。仅使用整数算术,因此适用于任意大值。说明:

Nθ

输入q

≔⁰ηW‹ηθ«≦⊕η≧⁻ηθ»

通过减去不断增加的数字来计算对角线q,最后得出目标行数m

⊞υ¹Fθ⊞υ⁻⁺³ι§υ⊖§υι

计算A019446的第一m+1项,尽管我们仅对此感兴趣。m

⊞υθF⁺²⁻θη⊞υΣ…⮌υ²

计算以n+4开头的广义斐波纳契数列的第一项[a(m), m]。该序列的m术语是A019446A001477A000201A003622A035336的术语。这最后两列是Wythoff数组的前两列,因此此序列继续m到数组的第th行的其余部分。

I⊟υ

输出所需的术语。

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.