16
\$\开始组\$

介绍(可以忽略)

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

在这个挑战中,我们将遇到Wythoff阵列,它是一个交织在一起的雪崩斐波那契数列和贝蒂数列!

这个斐波那契数对你们大多数人来说,这可能是一个众所周知的序列。给定两个起始数字\$F_0\$\F_1美元\$,如下\$F_n\$由以下人员提供:\$F_n=F_{(n-1)}+F_{(n-2)}\$对于\$n>2\$.

这个贝亚蒂定理,给定一个参数\美元\$是:\$B^r_n=\floor rn\floor\$对于\$n\ge 1美元\$Beatty序列的特性之一是对于每个参数\美元\$,只有一个参数\$s=r/(r-1)\$,以便这些参数的Beatty序列是分离的结合在一起,它们跨越除0以外的所有自然数(例如:\$B^r\杯B^{r/(r-1)}=\Bbb{N}\setminus\{0\}\$).

现在,令人震惊的部分来了:您可以创建一个数组,其中每一行是一个斐波那契序列每一列都是一个Beatty序列。此数组是威瑟夫阵列。最好的部分是:每个正数在此数组中只出现一次!数组如下所示:

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 ......

第行的元素\百万美元\$和列\n美元\$定义为:

\$A_{m,n}=\开始{cases}\left\lfloor\lfloor m\varphi\rfloor\varphi\ right\rfloor&\text{if}n=1\\\left\lfloor\lfloor m\varphi\rfloor\varphi^2\right\rfloor和\text{if}n=2\\A_{m,n-2}+A_{m,n-1}&\text{if}n>2\结束{cases}\$

哪里\美元\varphi\$是黄金比例:\$\varphi=\frac{1+\sqrt{5}}{2}\$.

如果我们遵循这个数组的反对角线,我们会得到A035513号,这是此挑战的目标序列(注意,此序列是通过以下方式添加到OEIS中的尼尔·斯洛恩他自己!)。由于这是一个“纯序列”挑战,因此任务是输出\a(n)美元\$对于给定的\n美元\$作为输入,其中\a(n)美元\$A035513号.

你可以遵循不同的策略来实现\a(n)美元\$,这使得这个挑战(在我看来)非常有趣。

任务

给定整数输入\亿美元\$,输出\a(n)美元\$整数格式,其中\a(n)美元\$A035513号.

注:此处假定为基于1的索引;您可以使用基于0的索引,因此\$a(0)=1;a(1)=2\$,等等。如果你选择使用这个,请在你的回答中提到这一点。

测试用例

输入|输出---------------1     |  15     |  720    |  2050    |  13678    |  30123   |  31941234  |  82122364863000  |  8149999  |  10824029890 |  637

知道最大的\a(n)美元\$对于\$1\len\le32767美元\$\$a(32642)=5126530484851883941621632839304139171479973138989971=F(256)\lfloor 2\varphi\rfloor+F(255)\$

规则

  • 输入和输出为整数
  • 您的程序应至少支持1到32767范围内的输入)。请注意\a(n)美元\$在此范围内最多可包含30位数字。。。
  • 无效输入(0、浮点、字符串、负值等)可能会导致无法预测的输出、错误或(未定义的)行为。
  • 违约I/O规则适用。
  • 默认漏洞是被禁止的。
  • 这是,因此以字节为单位的最短答案获胜
\$\端组\$
12
  • 2
    \$\开始组\$ 那么这里的新订单参考是什么? \$\端组\$ 2019年4月14日21:03
  • 2
    \$\开始组\$ @路易斯·门多:雪崩Fibonacci和Beatty序列的组合,形成了Wythoff阵列。。。 \$\端组\$ 2019年4月14日21:10
  • \$\开始组\$ 啊,我完全错过了!现在我觉得后悔... \$\端组\$ 2019年4月14日21:13
  • 1
    \$\开始组\$ φ(或rt(5))的浮点表示和递归的应用是否满足范围要求? \$\端组\$ 2019年4月14日21:18
  • 1
    \$\开始组\$ 请修复第9个测试用例:它是9999999 \$\端组\$ 2019年4月14日22:58

5个答案5

重置为默认值
6
\$\开始组\$

,143 130 124123字节

函数(n){k=0:n+1`~`=循环m=k-1~(k*(1+5^.5)/2)%/%1对于(i in k)m=m~m[i,]+m[i+1,]m=米[-1:-2,]m[顺序(行(m)+列(m))][n]}

在线试用!

使用公式\$T(n,-1)=n-1;T(n,0)=\lfloor n \cdot\phi\rfloor;T(n,k)=T(n、k-1)+T(n和k-2)\$构造数组(转置),然后拆分沿反对偶线排列。k个只是为了防止强制下降=F中的参数米[-1:-2,]为了这个案子n=1.

感谢尼尔指出一个1字节的高尔夫球。

,150 138132字节

函数(n){T[2]=1对于(jin2: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[顺序(行(m)+列(m))][n]}

在线试用!

实现公式\$T(n,k)=光纤(k+1)\cdot\lfloor n\cdot\phi\rfloor+光纤(k)\cdot(n-1)\$生成数组,然后拆分沿着反对偶线提取第n个元素。

感谢罗宾·赖德对于T[2]=1生成斐波那契序列的技巧。


这两种解决方案效率都很低nxn个矩阵(最有可能)双重的s、 随着R的推广整数(32位签名)到双重的溢出时自动执行,但第二个应该快得多。n个因为bignum应该使用调用自动工作gmp::作为.biz(n),如果精度损失低于双重的令人担忧,然后语言就会R+gmp.

\$\端组\$
2
  • \$\开始组\$ 你能用吗(1+5^.5)/2而不是(.5+5^.5/2) \$\端组\$
    – 尼尔
    2019年4月16日20:35
  • \$\开始组\$ @尼尔。。。是的,我能。谢谢您!除非我能找到更多的方法,否则我只会把它编辑到顶部。 \$\端组\$
    – 朱塞佩
    2019年4月16日21:01
5
\$\开始组\$

果冻,2724字节

p`SÞ⁸ịabl’;×Øp¥×r’ÆSðS/

在线试用!

使用基于1的索引的一元链接。感谢@JonathanAllan提供了从n个并节省3个字节。在其最短形式中,TIO上的较大n太慢,因此如下所示在线试用!以三个字节的代价减少了初始行和列列表的大小。

解释

p`|范围从1..输入到自身的笛卡尔积SÞ|按总和排序⁸ị                   | 在输入指示的位置查找元组-这是行和列以行为左,以列为右自变量,启动一个新的二元链'|将行增加1;    ¥|连接到:×Øp|行×φḞ            |   四舍五入×?|将这一对乘以ÆḞ|位置处的斐波那契数⁹         |   列索引和r'|列索引加一S|总和

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

\$\端组\$
1
  • 1
    \$\开始组\$ ...×r’ÆSðS/在合并版本中保存一个(TIO公司) \$\端组\$ 2019年4月14日23:32
\$\开始组\$

Wolfram语言(数学),90字节

压扁[表[(F=Fibonacci)[a+1]⌊(b-a+1)黄金比率⌋+(b-a)F@a,{b,#},{a,b,1,-1}][[#]]&

在线试用!

\$\端组\$
2
\$\开始组\$

果冻, 30字节

p`SÞ⁸ịð;Øp,²\¤×¥/;+ƝQƊ¡ị@ð/

在线试用!
这有点慢,但使用前缀½Ċ(双,平方根,天花板)像这样测试套件.

\$\端组\$
  • 2
    \$\开始组\$ 你是对的!740496902是的结果999 \$\端组\$ 2019年4月14日22:54
  • \$\开始组\$ 结合你的第一部分和我的第二部分25字节.不确定我们中的哪一个应该有组合版本! \$\端组\$ 2019年4月14日23:05
  • \$\开始组\$ @尼克·肯尼迪-很好,加油! \$\端组\$ 2019年4月14日23:07
2
\$\开始组\$

木炭,54字节

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

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

θ

输入.

ηW‹ηθ«≦⊕η≧ηθ»

通过从中减去不断增加的数字来计算反对角线,以目标行号结束.

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

计算第一个米+1条款A019446号虽然我们只对第。

⊞υθf多一点²θη⊞υΣ…υ²

计算第一个n+4广义斐波那契级数的项【a(m),m】此序列的术语为第项A019446号,A001477号,A000201号,A003622号,A035336号; 最后两列是Wythoff数组的前两列,因此此序列继续执行数组的第行。

I⊟υ

输出所需的术语。

\$\端组\$

你的答案

点击“发布您的答案”,即表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.