Rekurencyjnie połączone sumaryczne sumy [N] z iteracjami M.


14

Weź dwie dodatnie liczby całkowite Ni Mutwórz połączone sumy sumaryczne [N]z Miteracjami. Wyprowadza wynik ostatniej iteracji.

Definicja skonsolidowanej sumy skumulowanej:

  1. Zacznij od liczby Ni zdefiniuj sekwencjęX = [N]
  2. Dołącz do Xłącznych kwotX
  3. Powtórz krok 2 Mrazy.

Skumulowana suma wektora, X = [x1, x2, x3, x4]wynosi: [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

Przykład z N = 1i M = 4:

P = funkcja sumy skumulowanej.

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]

Zauważ, że pierwszy X = [1]nie jest liczony jako iteracja. Możesz zdecydować się M = 5na powyższy przykład (licząc w ten sposóbX = [1] jako jedną iterację).

To jest OEIS A107946


Przypadki testowe:

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

To jest , więc wygrywa najkrótszy kod. Opcjonalne formaty wejściowe i wyjściowe.


Teraz jest już trochę za późno, ale czy Nnaprawdę coś jeszcze dodaje do problemu? To tylko stały czynnik, przez który mnożymy wynik.
Martin Ender,

Odpowiedzi:



6

05AB1E , 7 bajtów

¸IFDηO«

Wypróbuj online!

Wyjaśnienie

¸         # 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

Łuska , 9 8 7 bajtów

Dzięki H.PWiz za zapisanie 1 bajtu.

!¡S+G+;

Wypróbuj online!

Wykorzystuje 1 M.

Wyjaśnienie

      ;     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.

Takie też było moje podejście, nie jestem pewien, czy jest to gra w golfa. Ponadto zasugerowałem już , aby cumsumnie zwracać wiodącego 0(co w tym przypadku pozwoliłoby zaoszczędzić 2 bajty).
Erik the Outgolfer,

Może ot∫być G+?
H.PWiz

@ H.PWiz Hmm ... dokumenty wydają się niejasne (AFAIK „skan” oznacza „zmniejsz”, a nie „skumuluj zmniejsz”).
Erik the Outgolfer,

Foznacza redukcję Gskumulowaną redukcję
H.PWiz

5

MATL , 6 bajtów

:"tYsh

Dane wejściowe są Mzatem N.

Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie

:"      % 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? Jestem pewien, że próbowałem 100 razy. Próbowałem nawet przejść do strony Suever, aby upewnić się, że nie był to jakiś dziwny błąd na TIO ... W ogóle tego nie rozumiem ...
Stewie Griffin

2
Nie mogę przestać o tym myśleć ... Jestem absolutnie pewien, że pisałem te dokładne postacie raz za razem i próbowałem uruchomić je na dwóch różnych stronach, bez powodzenia. Ponieważ tak nie jest, jedynym wyjaśnieniem jest to, że wariuję ... To naprawdę szaleje w mojej głowie!
Stewie Griffin


3

Python 2 , 83 78 75 71 65 63 60 bajtów

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

Wypróbuj online!

Zaoszczędzono 6 8 bajtów dzięki Rodowi
Zaoszczędzono 3 bajty dzięki Erikowi


@Rod Więcej podziękowań: D
TFeld

Nie potrzebujesz [:], rjest tuple.
Erik the Outgolfer,

@EriktheOutgolfer, dzięki, to pozostałość z czasów, gdy r była listą
TFeld

3

Dyalog APL , 12 bajtów

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

Bierze N po prawej stronie i M po lewej. Spróbuj APL tutaj!

Wyjaśnienie:

{(⊢,+\)⍣⍺⊢⍵}
{          } 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

Uwielbiam to wyjaśnienie. Bardzo jasne, co się dzieje. Trudne do zrozumienia APL inaczej: P
Emigna

2

Java (OpenJDK 8) , 194 181 175 163 134 110 bajtów

(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;}

Wypróbuj online!


2
110 bajtów:(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;}
Nevay,

1

Dyalog APL , 19 bajtów

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

Wypróbuj online!

Funkcja dyadyczna, z Nprawej i Mlewej strony.

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



0

JavaScript (ES6), 55 54 bajtów

Pobiera dane wejściowe w składni curry (m)(n).

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

Przypadki testowe


0

Galaretka , 5 bajtów

;+\$¡

Wypróbuj online!

Sugerowana wersja Dennisa (zwraca nzamiast [n]tablic singleton).


Wi można je usunąć.
Dennis,

@Dennis Obawiam się, że wyjście nie będzie wtedy? Myślałem o tym, ale jeśli otrzymam dane wejściowe 1i 0obawiam się, że wrócę 1zamiast ich [1]usunięcia, nie mogę użyć pełnego programu, ponieważ jego dane wyjściowe byłyby nadal takie.
Erik the Outgolfer,

1jest jak Jelly wyświetla tablicę [1]. Nie widzę z tym problemu.
Dennis,

@Dennis Hmm ... trochę podejrzliwy w stosunku do tego (jak powiedziałem w ostatniej części mojego komentarza powyżej) ... czy istnieje jakikolwiek konsensus na to pozwalający, czy też byłoby to traktowane jako „standardowe nadużywanie luk w danych”?
Erik the Outgolfer,

Oba formaty są w porządku.
CG.

0

Clojure, 67 bajtów

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec i))))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.