Рекурсивно каскадные кумулятивные суммы [N] с М итерациями

14

Возьмите два натуральных числа Nи Mсоздайте объединенные кумулятивные суммы [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

Это , поэтому выигрывает самый короткий код. Дополнительные форматы ввода и вывода.

CG.
источник
Сейчас уже слишком поздно, но Nдействительно ли это что-то добавляет к проблеме? Это просто постоянный коэффициент, на который вы умножаете результат.
Мартин Эндер

Ответы:

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
Emigna
источник
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 байта в данном случае).
Эрик Outgolfer
Может ot∫быть G+?
H.PWiz
@ H.PWiz Хм ... Документы, кажется, неясно по этому поводу (AFAIK "сканирование" означает "уменьшить", а не "кумулятивное сокращение").
Эрик Outgolfer
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
Whaaaaat? Я уверен, что попробовал это 100 раз. Я даже попытался перейти на сайт Suever, чтобы убедиться, что это не какая-то странная ошибка на TIO ... Я вообще этого не понимаю ...
Stewie Griffin
2
Я не могу перестать думать об этом ... Я абсолютно уверен, что снова и снова писал эти точные символы и пытался запустить его на двух разных сайтах, но безуспешно. Так как этого не может быть, остается только одно объяснение: я схожу с ума ... Это действительно портит мою голову!
Стьюи Гриффин
3

Python 2 , 83 78 75 71 65 63 60 байт

def f(n,m):r=n,;exec"s=0\nfor c in r:s+=c;r+=s,\n"*m;print r

Попробуйте онлайн!

Сохранено 6 8 байт благодаря штанге.
Сохранено 3 байта благодаря Эрику.

TFeld
источник
@Род Еще спасибо: D
TFeld
Вам не нужно [:], rэто tuple.
Эрик Outgolfer
@EriktheOutgolfer, спасибо, это остаток от того, когда r был списком
TFeld
3

Дьялог АПЛ , 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
dzaima
источник
Люблю объяснения. Очень ясно, что происходит. Трудно понять APL иначе: P
Emigna
2

Java (OpenJDK 8) , 194 181 175 163 134 110 байт

(n,m)->{int a[]=new int[1<<m],c=1,i;for(a[0]=n;m-->0;)for(n=0;2*n<c;c++)for(i=++n;i-->0;a[c]+=a[i]);return a;}

Попробуйте онлайн!

Роберто Грэм
источник
2
110 байт:(n,m)->{int a[]=new int[1<<m],c=1,i;for(a[0]=n;m-->0;)for(n=0;2*n<c;c++)for(i=++n;i-->0;a[c]+=a[i]);return a;}
Невай
0

JavaScript (ES6), 55 54 байта

Принимает ввод в синтаксисе карри (m)(n).

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

Контрольные примеры

Arnauld
источник
0

Желе , 5 байт

;+\$¡

Попробуйте онлайн!

Предложенная версия Деннисом (возвращается nвместо [n]одноэлементных массивов).

Эрик Outgolfer
источник
Wи могут быть удалены.
Деннис
@ Денис Боюсь, что выход не будет правильным? Я думал об этом, но если я получу входные данные, 1и 0я боюсь, что я вернусь 1вместо того, [1]чтобы удалить их, и я не могу вместо этого использовать полную программу, поскольку ее вывод все равно будет таким.
Эрик Outgolfer
1как желе отображает массив [1]. Я не вижу проблем с этим.
Деннис
@ Деннис Хмм ... немного подозрительно к этому (как я уже говорил в последней части моего комментария выше) ... есть ли согласие, позволяющее это сделать, или это будет считаться "стандартным типом данных, злоупотребляющим лазейкой"?
Эрик Outgolfer
Оба формата в порядке.
CG.
0

Clojure, 67 байт

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec i))))
NikoNyrh
источник