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 1
to 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
)以使其真正起作用。我仍然认为,一些猜测和尝试可能会破解它。