Haskell,226个字节,安全!
不知道是聪明还是丑陋,也许两者都...
o n=read.pure.(!!n)$"A001906"
m::Integral a=>[a->a->a]
m=[const,(+),(-),(*),div,(^)]++(flip<$>m)
l=o 1:o 3-o 1:zipWith(m!!(o 6+o 3-o 2))(tail l)l
f=(l!!).((m!!(o 4+o 5+o 6-2*o 1-o 2))$sum[1|n<-[1..6],odd(o n)]).((m!!o 6)$o 3)
因此,现在它计算A001906,但它应该能够生成很多序列。
在线尝试!
解决方案:A131078
想知道这是否太困难或没有人尝试过?
o 1to o 6是序列号的数字,m是操作列表。l是递归定义的无限列表,其中前两个值是从序列号导出的,其余的是前一个值使用的固定操作从前两个值计算出来的m。对于A001906,可以将定义简化为
l=0:1:zipWith(flip(+))(tail l)l
(flip(+))(通常)与相同(+),我们得到了斐波那契数的一个众所周知的定义(但不是最短的定义)。此递归方案可以直接计算A001906,但需要的操作比中的操作更为复杂m。又如:使用初始值1和2与操作(*)给出系列A000301。当序列号替换为时,由我们的代码计算得出?103206。
最后,该函数f索引到list中l,但仅在对输入进行一些转换之后。对于A001906,中间部分减小为(*)2,因此我们仅在偶数位置获得斐波那契数。右边的部分变成flip const 1,这是身份功能,不会进一步干扰。
对于溶液A131078,的初始值l是1与0,且操作flip const,它可以让l是1,0,1,0,...。中间部分f变成(flip div 4),导致1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,...。这看起来是一个不错的答案,但是后来我看到A131078从开始n=1,所以我在的右侧添加了f,flip(-)1减去一个。
我的想法是通过使用m序列号中的数字并对其进行索引来使其有点混乱,然后使其变得更加混乱(复杂的术语)以使其起作用(也许我没有花足够长的时间寻找替代方案);然后它变得更加模糊(在的右侧f)以使其真正起作用。我仍然认为,一些猜测和尝试可能会破解它。