递归级联[N]的累积和与M次迭代


14

取两个正整数NM[N]通过M迭代创建的串联累积和。输出最后一次迭代的结果。

串联累积和的定义:

  1. 以数字开头N并定义顺序X = [N]
  2. 追加到X的累积和X
  3. 重复步骤2 M次。

向量的累加和X = [x1, x2, x3, x4]为:[x1, x1+x2, x1+x2+x3, x1+x2+x3+x4]

N = 1和的示例M = 4

P =累积和函数。

M = 0: [1]
M = 1: [1, 1]                    -  X = [1, P(1)] = [[1], [1]]      
M = 2: [1, 1, 1, 2]              -  X = [X, P(X)] = [[1, 1], [1, 2]]
M = 3: [1, 1, 1, 2, 1, 2, 3, 5]  -  X = [X, P(X)] = [[1, 1, 1, 2], [1, 2, 3, 5]]
M = 4: [1, 1, 1, 2, 1, 2, 3, 5, 1, 2, 3, 5, 6, 8, 11, 16]

请注意,第一个X = [1]不算作迭代。您可以选择M = 5上面的示例(因此算作X = [1]一次迭代)。

这是OEIS A107946


测试用例:

N = 5, M = 1
5, 5

N = 2, M = 3
2, 2, 2, 4, 2, 4, 6, 10

N = 4, M = 6
4, 4, 4, 8, 4, 8, 12, 20, 4, 8, 12, 20, 24, 32, 44, 64, 4, 8, 12, 20, 24, 32, 44, 64, 68, 76, 88, 108, 132, 164, 208, 272, 4, 8, 12, 20, 24, 32, 44, 64, 68, 76, 88, 108, 132, 164, 208, 272, 276, 284, 296, 316, 340, 372, 416, 480, 548, 624, 712, 820, 952, 1116, 1324, 1596

这是,因此最短的代码获胜。可选的输入和输出格式。


现在为时已晚,但是N真的增加了任何问题吗?这只是乘以结果的常数。
马丁·恩德

Answers:



6

05AB1E,7个字节

¸IFDηO«

在线尝试!

说明

¸         # wrap input_1 in a list
 IF       # input_2 times do:
   D      # duplicate the list
    η     # get prefixes of the list
     O    # sum the prefixes
      «   # concatenate to the current list

6

外壳9 8 7字节

感谢H.PWiz节省了1个字节。

!¡S+G+;

在线尝试!

使用基于1的M

说明

      ;     Wrap N in a list to get [N].
 ¡          Iterate the following function on this list and collect
            the results in an infinite list.
  S+        Concatenate the current value with...
    G+      ...the cumulative sum. We're not using the cumsum built-in ∫ 
            because it prepends a zero.
!           Use M as an index into the infinite list.

我的方法也是,我不确定它是否可以打高尔夫球。另外,我已经提出cumsum不回一个领先的0(东西这将节省2个字节在这种情况下)。
Erik the Outgolfer '17

ot∫G+
H.PWiz

@ H.PWiz嗯...文档似乎尚不清楚(AFAIK“扫描”的意思是“减少”而不是“累积减少”)。
暴民埃里克(Erik the Outgolfer)'17年

F是减少G是累积减少
H.PWiz

5

MATL,6个字节

:"tYsh

输入是M,然后N

在线尝试!验证所有测试用例

说明

:"      % Implicitly input M. Do the following M times
  t     %   Implicitly input N the first time. Duplicate
  Ys    %   Cumulative sum
  h     %   Concatenate horizontally
        % Implicitly end loop. Implicitly display stack

3
哇啊?我确定我已经尝试了100次。我什至尝试过访问Suever的网站,以确保它不是TIO上的奇怪错误……我一点也不明白……
Stewie Griffin

2
我不能停止思考...我绝对可以肯定我已经一遍又一遍地写那些确切的字符,并试图在两个不同的站点上运行它,但都没有成功。既然不可能这样,剩下的唯一解释就是我快要疯了……这真让我头晕!
Stewie Griffin



3

Dyalog APL,12个字节

{(⊢,+\)⍣⍺⊢⍵}

在右侧取N,在左侧取M。 在这里尝试APL!

说明:

{(⊢,+\)⍣⍺⊢⍵}
{          } an anonymous function
 (⊢,+\)      a train for a single iteration:
             the right argument
   ,          concatenated with
    +\        the cumulative sum 
            repeated
             left argument times
         ⊢⍵  on the right argument

喜欢这个解释。非常清楚发生了什么事。否则很难理解APL:P
Emigna '17


1

Dyalog APL,19个字节

{0=⍺:⍵⋄(⍺-1)∇⍵,+\⍵}

在线尝试!

双向函数,N在右侧和M左侧。

{
    0=⍺: ⍵         ⍝ if a = 0 return
    (⍺-1) ∇ ⍵,+\⍵  ⍝ recurse with the array
                   ⍝ joined with its cumsum (+\⍵)
}



0

JavaScript(ES6),55 54字节

以currying语法接受输入(m)(n)

m=>g=a=>m--?g([...a=+a?[a]:a,...a.map(x=>s+=x,s=0)]):a

测试用例


0

果冻,5个字节

;+\$¡

在线尝试!

Dennis建议的版本(返回n而不是[n]单例数组)。


W可以将其删除。
丹尼斯

@Dennis恐怕输出不正确吗?我想到了,但是如果我得到输入10恐怕我将返回1而不是[1]删除这些输入,并且我不能使用完整的程序,因为它的输出仍然是这样。
Erik the Outgolfer

1是Jelly显示数组的方式[1]。我认为没有问题。
丹尼斯

@Dennis Hmm ...对此有点怀疑(正如我在上面的评论的最后部分所说)...是否达成共识,还是将其视为“标准漏洞滥用数据类型”?
暴民埃里克(Erik the Outgolfer)'17年

两种格式都可以。
CG。

0

Clojure,67个字节

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec 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.