Рекурсивно з'єднані сукупні суми [N] з M ітераціями


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

Це , тому найкоротший код виграє. Необов’язкові формати введення та виведення.


Зараз трохи пізно, але чи Nсправді щось додає до проблеми? Це просто постійний коефіцієнт, на який ви множите результат.
Мартін Ендер

Відповіді:


7

Haskell , 35 байт

n!m=iterate((++)<*>scanl1(+))[n]!!m

Спробуйте в Інтернеті!

Завдяки H.PWiz за -18 байт


tail.scanl(+)0може бутиscanl1(+)
H.PWiz

@ H.PWiz Спасибі, я завжди забуваю про *1версії scanта fold.
Мего


1
35 байт з використаннямiterate
H.PWiz

Я просто збираюся відмовитися від пояснення - занадто багато зусиль, щоб змінювати його кожен раз: P
Мего


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 байта в даному випадку).
Ерік Аутгольфер

Може ot∫бути G+?
H.PWiz

@ H.PWiz Хм ... документи виглядають незрозумілими щодо цього (AFAIK "сканування" означає "зменшити" не "кумулятивне зменшення").
Ерік Аутгольфер

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 разів. Я навіть спробував перейти на сайт Сьювера, щоб переконатися, що це не якась дивна помилка в TIO ... Я цього зовсім не розумію ...
Стюі Гріффін

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 байти завдяки Еріку


@Rod Більше дякую: D
TFeld

Вам не потрібно [:], rє tuple.
Ерік Аутгольфер

@EriktheOutgolfer, спасибі, це залишилося від того, коли r був у списку
TFeld

3

Діалог 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
Емінья





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]масивів Singleton).


Wі можуть бути видалені.
Денніс

@ Денніс Боюся, що результат не буде правильним тоді? Я подумав про це, але якщо я отримаю вхідні дані 1і 0боюся, що повернусь 1замість цього, [1]якщо я видалю їх, і я не можу використовувати повну програму замість цього, оскільки його результат все одно буде таким.
Ерік Аутгольфер

1це те, як Jelly відображає масив [1]. Я не бачу проблем з цим.
Денніс

@ Деніс Хм ... трохи підозріло до цього (як я вже говорив в останній частині свого коментаря вище) ... чи існує якийсь консенсус, який це дозволяє, чи це вважатиметься "стандартною лазівкою, що зловживає типами даних"?
Erik the Outgolfer

Обидва формати нормально.
CG.

0

Clojure, 67 байт

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec i))))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.