Wydrukuj sekwencję N-bonacci

54

Nie jest to bardzo znane, ale to, co nazywamy sekwencją Fibonacciego, AKA

1, 1, 2, 3, 5, 8, 13, 21, 34...

nazywa się właściwie sekwencją Duonacciego . Jest tak, ponieważ aby uzyskać następny numer, sumujesz poprzednie 2 liczby. Istnieje również sekwencja Tribonacci ,

1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201...

ponieważ następny numer jest sumą poprzednich 3 liczb. I sekwencja Quadronacciego

1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673...

I ulubieniec wszystkich, sekwencja Pentanacciego :

1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129...

I sekwencja Hexanacciego, sekwencja Septanacciego, sekwencja Octonacciego i tak dalej, i tak dalej aż do sekwencji N-Bonacciego.

Sekwencja N-bonacci zawsze zaczyna się od N 1s z rzędu.

Wyzwanie

Musisz napisać funkcję lub program, który przyjmuje dwie liczby N i X i wypisuje pierwsze liczby X N-Bonacci. N będzie liczbą całkowitą większą niż 0 i możesz bezpiecznie założyć, że żadne liczby N-Bonacci nie przekroczą domyślnego typu liczb w twoim języku. Dane wyjściowe mogą być w dowolnym formacie czytelnym dla człowieka, a dane wejściowe można przyjmować w dowolny rozsądny sposób. (Argumenty wiersza poleceń, argumenty funkcji, STDIN itp.)

Jak zwykle jest to gra w golfa, więc obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach!

Próbka IO

#n,  x,     output
 3,  8  --> 1, 1, 1, 3, 5, 9, 17, 31
 7,  13 --> 1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193
 1,  20 --> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 30, 4  --> 1, 1, 1, 1       //Since the first 30 are all 1's
 5,  11 --> 1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129
DJMcMayhem
źródło
1
Człowieku, miałem ten pomysł jakiś czas temu i nigdy nie udało mi się go napisać.
Morgan Thrapp
9
Mój przycisk głosowania == twój awatar
ETHproductions
Czy 3-bonacci nie byłby 1, 1, 2, 4, 7na trzeciej pozycji 0 + 1 + 1? ... a więc jedno z innymi?
Parasol
1
@umbrella Nie, tribonacci zaczyna się od 3 1s. Zobacz moją edycję, aby wyjaśnić ten punkt.
DJMcMayhem

Odpowiedzi:

23

Boolfuck, 6 bajtów

,,[;+]

Możesz bezpiecznie założyć, że liczba N-Bonacci nie przekroczy domyślnego typu numeru w Twoim języku.

Domyślny typ liczby w Boolfuck jest trochę. Zakładając, że rozciąga się to również na liczby wejściowe N i X, a biorąc pod uwagę, że N> 0, istnieją tylko dwa możliwe wejścia - 10 (które nie dają niczego) i 11 (które wyjścia 1).

,wczytuje trochę do bieżącej lokalizacji pamięci. N jest ignorowane, ponieważ musi być 1. Jeśli X wynosi 0, ciało pętli (otoczone przez []) jest pomijane. Jeśli X wynosi 1, jest wyprowadzane, a następnie przestawiane na 0, aby pętla się nie powtarzała.

użytkownik253751
źródło
4
Czy nie ma takiej luki DOKŁADNIE takiej jak ta?
Stan Strum,
1
@StanStrum Przed czy po tej odpowiedzi?
user253751,
2
Wierzę, że przyszedł wcześniej, pozwól mi to sprawdzić ... Meta Link ; Pierwsza wersja była 31 stycznia 2016 o 13:44. Wow, nieważne! Miałem dwa dni wolnego. Chociaż, aby być upartym, ostatnia edycja tego była 31 stycznia 2016 o 16:06. Ooooooo tak, w mojej książce jest w porządku
Stan Strum,
9

Python 2, 79 bajtów

n,x=input()
i,f=0,[]
while i<x:v=[sum(f[i-n:]),1][i<n];f.append(v);print v;i+=1

Wypróbuj online

lambda
źródło
Spróbuj zamienić ostatnią linię naexec"v=[sum(f[i-n:]),1][i<n];f+=[v];print v;i+=1;"*x
Cyoce
8

Pyth, 13 lat

<Qu+Gs>QGEm1Q

Pakiet testowy

Oddziela znak nowej linii od npierwszego.

Wyjaśnienie:

<Qu+Gs>QGEm1Q  ##  implicit: Q = eval(input)
  u      Em1Q  ##  read a line of input, and reduce that many times starting with
               ##  Q 1s in a list, with a lambda G,H
               ##  where G is the old value and H is the new one
   +G          ##  append to the old value
     s>QG      ##  the sum of the last Q values of the old value
<Q             ##  discard the last Q values of this list
FryAmTheEggman
źródło
1
Wow, to było szybkie. Ledwo zdążyłem zamknąć przeglądarkę, zanim to opublikowałeś!
DJMcMayhem
5

Haskell, 56 bajtów

g l=sum l:g(sum l:init l)
n#x|i<-1<$[1..n]=take x$i++g i

Przykład użycia: 3 # 8-> [1,1,1,3,5,9,17,31].

Jak to działa

i<-1<$[1..n]           -- bind i to n copies of 1
take x                 -- take the first x elements of
       i++g i          -- the list starting with i followed by (g i), which is
sum l:                 -- the sum of it's argument followed by
      g(sum l:init l)  -- a recursive call to itself with the the first element
                       -- of the argument list replaced by the sum
nimi
źródło
Nie powinno być, że tail lzamiast init l?
dumny haskeller
@proudhaskeller: to nie ma znaczenia. trzymamy ostatnie nelementy na liście. Nie ma różnicy między usuwaniem od końca i dodawaniem do przodu i odwrotnie, tj. Usuwaniem od przodu i dodawaniem do końca, ponieważ początkowa lista składa się tylko z 1s.
nimi
Oh, już rozumiem. To fajny sposób na zastąpienie ++[]przez :!
dumny haskeller
@proudhaskeller: tak, dokładnie!
nimi
5

Python 2, 55 bajtów

def f(x,n):l=[1]*n;exec"print l[0];l=l[1:]+[sum(l)];"*x

Śledzi nokno długości sekwencji na liście l, aktualizowane przez dodanie sumy i usunięcie pierwszego elementu. Drukuje pierwszy element każdej iteracji dla xiteracji.

Inne podejście do przechowywania wszystkich elementów i sumowania ostatnich nwartości dało tę samą długość (55).

def f(x,n):l=[1]*n;exec"l+=sum(l[-n:]),;"*x;print l[:x]
xnor
źródło
5

JavaScript ES6 / ES2015, 107 97 85 80 bajtów

Dzięki @ user81655, @Neil i @ETHproductions za zaoszczędzenie niektórych bajtów


(i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(eval(l.slice(-i).join`+`));l")

spróbuj online


Przypadki testowe:

console.log(f(3,  8))// 1, 1, 1, 3, 5, 9, 17, 31
console.log(f(7,  13))// 1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193
console.log(f(5,  11))// 1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129
gabrielperales
źródło
1
Miły. Kilka wskazówek golfowych: forzawsze jest lepsze niż while, x.split('')-> [...x], ~~a-> +a, n-=1-> n--, jeśli zamkniesz całe ciało funkcji w eval, nie musisz pisać return. Ponadto, nawet krótszy niż [...'1'.repeat(i)]jest Array(i).fill(1)i można usunąć ~~z ai b. I możesz usunąć f=.
user81655,
2
To, co wygląda na to, ze moje wskazówki (85 bajty): (i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));l"). Zmieniłem kolejność instrukcji, połączyłem argumenty n--w n-ii usunąłem lz argumentów, aby zaoszczędzić kilka dodatkowych bajtów.
user81655 30.01.2016
1
@ user81655 Nie otrzymuję evaloszczędności; (i,n)=>{for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));return l}ma nadal 85 bajtów.
Neil
@ Nee Wygląda mi na 86 bajtów ...
user81655 30.01.2016
3
l.slice(-i).reduce((a,b)=>a+b)=>eval(l.slice(-i).join`+`)
ETHprodukcje
4

ES6, 66 bajtów

(i,n)=>[...Array(n)].map((_,j,a)=>a[j]=j<i?1:j-i?s+=s-a[j+~i]:s=i)

Niestety mapnie pozwoli ci uzyskać dostępu do tablicy wyników w wywołaniu zwrotnym.

Neil
źródło
1
Zapisz bajt, curry parametrów.
Kudłaty
4

Galaretka, 12 bajtów

ḣ³S;
b1Ç⁴¡Uḣ

Wypróbuj online!

Jak to działa

b1Ç⁴¡Uḣ  Main link. Left input: n. Right input: x.

b1       Convert n to base 1.
    ¡    Call...
  Ç        the helper link...
   ⁴       x times.
     U   Reverse the resulting array.
      ḣ  Take its first x elements.


ḣ³S;     Helper link. Argument: A (list)

ḣ³       Take the first n elements of A.
  S      Compute their sum.
   ;     Prepend the sum to A.
Dennis
źródło
3

C ++ 11, 360 bajtów

Cześć, podoba mi się to pytanie. Wiem, że c ++ jest bardzo trudnym językiem do wygrania tego konkursu. Ale i tak wrzucę monetę.

#include<vector>
#include<numeric>
#include<iostream>
using namespace std;typedef vector<int>v;void p(v& i) {for(auto&v:i)cout<<v<<" ";cout<<endl;}v b(int s,int n){v r(n<s?n:s,1);r.reserve(n);for(auto i=r.begin();r.size()<n;i++){r.push_back(accumulate(i,i+s,0));}return r;}int main(int c, char** a){if(c<3)return 1;v s=b(atoi(a[1]),atoi(a[2]));p(s);return 0;}

Zostawię to jako czytelne wyjaśnienie powyższego kodu.

#include <vector>
#include <numeric>
#include <iostream>

using namespace std;
typedef vector<int> vi;

void p(const vi& in) {
    for (auto& v : in )
        cout << v << " ";
    cout << endl;
}

vi bonacci(int se, int n) {
    vi s(n < se? n : se, 1);
    s.reserve(n);
    for (auto it = s.begin(); s.size() < n; it++){
        s.push_back(accumulate(it, it + se, 0));
    }
    return s;
}

int main (int c, char** v) {
    if (c < 3) return 1;
    vi s = bonacci(atoi(v[1]), atoi(v[2]));
    p(s);
    return 0;
}
hetepeperfan
źródło
Witamy w Programowaniu zagadek i Code Golf. To dobra odpowiedź, jednak zauważyłem, że masz dużo białych znaków i nazw zmiennych i funkcji, które są dłuższe niż 1 znak. W obecnej formie jest to dobra czytelna wersja twojego kodu, ale powinieneś dodać wersję golfową. Kiedy to zrobisz, dam ci głos, ale dopóki nie zostanie zagrany w golfa, nie zrobię tego.
wizzwizz4,
@ wizzwizz4 Cześć, dodałem powyższą wersję gry w golfa. Zostawiłem niepoznany kod, aby ludzie mogli zobaczyć, jak to zrobiłem. Poza tym lubię czytać funkcję bonacci, która zwraca vi, która wciąż brzmi jak vibonacci. Wydaje mi się, że nie powinienem skracać głównej funkcji, ponieważ standard nakazuje użycie int main (int, char **) jako punktu wejścia programu. Ponadto uważam, że wszystkie zmienne mają maksymalnie 1 znak i wszystkie nieistotne białe znaki są usuwane.
hetepeperfan
3
Nie jest to kod „zgodny ze standardami”. To jest golf golfowy . Manipulujemy i korzystamy z naszych języków. Jeśli jakieś zmienne są ints, usuń int. Jeśli jakieś funkcje są wywoływane foo, wywołaj je f. Bądź brutalny; zignoruj ​​standard i wykorzystaj kompilator. Tak grasz w golfa.
wizzwizz4 30.01.16
Kalambury i ładny kod należą tylko do kodu bez golfa . Ale nie wahaj się ich tam zatrzymać; tak naprawdę jest to zalecane. Ale bądź naprawdę, naprawdę niemiły dla kompilatora, kiedy grasz w swój kod. Zrób to tak małe, jak to możliwe, bez względu na wszystko . (Och, a oto +1, które obiecałem!)
wizzwizz4 30.01.16
@ wizzwizz4 Czy usunięcie „int” jest prawidłowe? Myślałem, że int nie będzie działać.
DJMcMayhem
3

Haskell , 47 bajtów

q(h:t)=h:q(t++[h+sum t])
n?x=take x$q$1<$[1..n]

Wypróbuj online!

<$ mógł zostać wprowadzony do Preludium po opublikowaniu tego wyzwania.


Haskell , 53 bajty

n%i|i>n=sum$map(n%)[i-n..i-1]|0<1=1
n?x=map(n%)[1..x]

Wypróbuj online!

Definiuje funkcję binarną ?, używaną jak 3?8 == [1,1,1,3,5,9,17,31].

Funkcja pomocnicza %rekurencyjnie znajduje ielement th nsekwencji -bonacci, sumując poprzednie nwartości. Następnie funkcja ?zestawia pierwsze xwartości %.

xnor
źródło
Stara odpowiedź, ale czy masz na myśli „funkcję pomocniczą %”?
Conor O'Brien
Zmiana wartowników zmieni się i<=nw i>n.
Ørjan Johansen
@ ØrjanJohansen Zauważyłem to również podczas edytowania, chociaż patrząc wstecz cała metoda wydaje się zła, więc mógłbym po prostu ponownie zagrać w golfa.
xnor
2

APL, 21

{⍵↑⍺{⍵,+/⍺↑⌽⍵}⍣⍵+⍺/1}

Jest to funkcja, która przyjmuje n za lewy argument, a x za prawy argument.

Wyjaśnienie:

{⍵↑⍺{⍵,+/⍺↑⌽⍵}⍣⍵+⍺/1}
                   ⍺/1  ⍝ begin state: X ones    
                  +     ⍝ identity function (to separate it from the ⍵)
    ⍺{         }⍣⍵     ⍝ apply this function N times to it with X as left argument
      ⍵,               ⍝ result of the previous iteration, followed by...
        +/              ⍝ the sum of
          ⍺↑            ⍝ the first X of
            ⌽          ⍝ the reverse of
             ⍵         ⍝ the previous iteration
 ⍵↑                    ⍝ take the first X numbers of the result

Przypadki testowe:

      ↑⍕¨ {⍵↑⍺{⍵,+/⍺↑⌽⍵}⍣⍵+⍺/1} /¨ (3 8)(7 13)(1 20)(30 4)(5 11)
 1 1 1 3 5 9 17 31                       
 1 1 1 1 1 1 1 7 13 25 49 97 193         
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
 1 1 1 1                                 
 1 1 1 1 1 5 9 17 33 65 129              
marinus
źródło
2

Python 3, 59

Zaoszczędzono 20 bajtów dzięki FryAmTheEggman.

Nie jest to świetne rozwiązanie, ale na razie będzie działać.

def r(n,x):f=[1]*n;exec('f+=[sum(f[-n:])];'*x);return f[:x]

Również tutaj są przypadki testowe:

assert r(3, 8) == [1, 1, 1, 3, 5, 9, 17, 31]
assert r(7, 13) == [1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193]
assert r(30, 4) == [1, 1, 1, 1]
Morgan Thrapp
źródło
2

Java, 82 + 58 = 140 bajtów

Funkcja znajdowania i- tej liczby n -bonacci ( 82 bajtów ):

int f(int i,int n){if(i<=n)return 1;int s=0,q=0;while(q++<n)s+=f(i-q,n);return s;}

Funkcja wypisania pierwszej k n -liczby numerycznej ( 58 bajtów ):

(k,n)->{for(int i=0;i<k;i++){System.out.println(f(i,n));}}
HyperNeutrino
źródło
2

Brain-Flak , 144 124 122 bajtów

-20 bajtów dzięki Nitroden

To jest moja pierwsza odpowiedź Brain-Flak i jestem pewien, że można ją poprawić. Każda pomoc jest mile widziana.

(([{}]<>)<{({}(()))}{}>)<>{({}[()]<<>({<({}<({}<>)<>>())>[()]}{})({}<><({({}<>)<>}<>)>)<>>)}{}<>{({}<{}>())}{}{({}<>)<>}<>

Wypróbuj online!

H.PWiz
źródło
2

Pari / GP , 46 bajtów

Funkcja generująca sekwencję to:

(n1)xnxn+12x+11x1

(n,m)->Vec(n--/(x-(2-1/x)/x^n)-1/(x-1)+O(x^m))

Wypróbuj online!

alephalpha
źródło
1

Julia, 78 bajtów

f(n,x)=(z=ones(Int,n);while endof(z)<x push!(z,sum(z[end-n+1:end]))end;z[1:x])

Jest to funkcja, która akceptuje dwie liczby całkowite i zwraca tablicę liczb całkowitych. Podejście jest proste: wygeneruj tablicę jedności długości n, a następnie powiększ tablicę, dodając sumę poprzednich nelementów, aż tablica będzie miała długość x.

Nie golfowany:

function f(n, x)
    z = ones(Int, n)
    while endof(z) < x
        push!(z, sum(z[end-n+1:end]))
    end
    return z[1:x]
end
Alex A.
źródło
1

MATL , 22 26 bajtów

1tiXIX"i:XK"tPI:)sh]K)

Używa bieżącej wersji (10.2.1) języka / kompilatora.

Wypróbuj online!

Kilka dodatkowych bajtów :-( z powodu błędu w Gfunkcji (wklejanie danych; teraz poprawione do następnej wersji)

Wyjaśnienie

1tiXIX"      % input N. Copy to clipboard I. Build row array of N ones
i:XK         % input X. Build row array [1,2,...X]. Copy to clipboard I
"            % for loop: repeat X times. Consumes array [1,2,...X]
  t          % duplicate (initially array of N ones)
  PI:)       % flip array and take first N elements
  sh         % compute sum and append to array
]            % end
K)           % take the first X elements of array. Implicitly display
Luis Mendo
źródło
1

Perl 6 , 38 bajtów

->\N,\X{({@_[*-N..*].sum||1}...*)[^X]} # 38 bytes
-> \N, \X {
  (

    {

      @_[
        *-N .. * # previous N values
      ].sum      # added together

      ||     # if that produces 0 or an error
      1      # return 1

    } ... *  # produce an infinite list of such values

  )[^X]      # return the first X values produced
}

Stosowanie:

# give it a lexical name
my &n-bonacci = >\N,\X{…}

for ( (3,8), (7,13), (1,20), (30,4), (5,11), ) {
  say n-bonacci |@_
}
(1 1 1 3 5 9 17 31)
(1 1 1 1 1 1 1 7 13 25 49 97 193)
(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
(1 1 1 1)
(1 1 1 1 1 5 9 17 33 65 129)
Brad Gilbert b2gills
źródło
1

C, 132 bajty

Podejście rekurencyjne jest krótsze o kilka bajtów.

k,n;f(i,s,j){for(j=s=0;j<i&j++<n;)s+=f(i-j);return i<n?1:s;}main(_,v)int**v;{for(n=atoi(v[1]);k++<atoi(v[2]);)printf("%d ",f(k-1));}

Nie golfił

k,n; /* loop index, n */

f(i,s,j) /* recursive function */
{
    for(j=s=0;j<i && j++<n;) /* sum previous n n-bonacci values */
        s+=f(i-j);
    return i<n?1:s; /* return either sum or n, depending on what index we're at */
}

main(_,v) int **v;
{
    for(n=atoi(v[1]);k++<atoi(v[2]);) /* print out n-bonacci numbers */
        printf("%d ", f(k-1));
}
Cole Cameron
źródło
1

Łuska , 9 bajtów

↑§¡ȯΣ↑_B1

Wypróbuj online!

Zaczyna się od Base- 1reprezentacji N (po prostu listy N ) i ¡terapeutycznie sumuje ( Σ) ostatnie ( ↑_) N elementów i dołącza wynik do listy. Na koniec pobiera ( ) pierwsze X liczb z tej listy i zwraca je.

Lew
źródło
1

R , 68 bajtów

function(n,x){a=1+!1:n;for(i in n+1:x){a[i]=sum(a[(i-n:1)])};a[1:x]}

Wypróbuj online!

Robert S.
źródło
0

Perl 6, 52 ~ 72 47 ~ 67 bajtów

sub a($n,$x){EVAL("1,"x$n~"+*"x$n~"...*")[^$x]}

Wymaga modułu z MONKEY-SEE-NO-EVALpowodu następującego błędu:

=== SORRY! === Błąd podczas kompilacji -e
EVAL jest bardzo niebezpieczną funkcją !!! (użyj opcji MONKEY-SEE-NO-EVAL, aby zastąpić,
ale tylko jeśli jesteś BARDZO pewny, że twoje dane nie zawierają ataków iniekcyjnych)
przy -e: 1

$ perl6 -MMONKEY-SEE-NO-EVAL -e'a(3,8).say;sub a($n,$x){EVAL("1,"x$n~"+*"x$n~"...*")[^$x]}'
(1 1 1 3 5 9 17 31)
andlrc
źródło
Czy ktoś wie, jak wyłączyć tryb ścisły itp.?
andlrc
Myślę, że jeśli użyjesz wersji Perl 6 przedświątecznej w 2015 roku, nie będzie to wymuszać małpowania-nie-eval.
Batman
0

PHP , 78 bajtów

for(list(,$n,$x)=$argv;$i<$x;print${$i++}." ")$s+=$$i=$i<$n?1:$$d+$s-=${$d++};

Wypróbuj online!

-4 Bajty za pomocą PHP> = 7.1 [,$n,$x]zamiastlist(,$n,$x)

Jörg Hülsermann
źródło
0

Jq 1,5 , 67 bajtów

def C:if length>X then.[:X]else.+=[.[-N:]|add]|C end;[range(N)|1]|C

Zakłada dane wejściowe dostarczone przez N i X, np

def N: 5;
def X: 11;

Rozszerzony

def C:                        # . is current array
    if length>X               # stop when array is as long as X
    then .[:X]                # return first X elements
    else .+=[.[-N:]|add] | C  # recursively add sum of last N elements to array
    end
;
  [range(N)|1]                # initial state
| C

Wypróbuj online!

jq170727
źródło
0

J, 31 bajtów

]{.(],[:+/[{.])^:(-@[`]`(1#~[))

Nie golfowany:

] {. (] , [: +/ [ {. ])^:(-@[`]`(1 #~ [))

wyjaśnienie

Czas zabawy z czasownikiem mocy w jego formie :

(-@[`]`(1 #~ [)) NB. gerund pre-processing

Szczegółowy podział:

  • ] {. ...Weź pierwsze <right arg>elementy wszystkich tych rzeczy po prawej stronie, które działają ...
  • <left> ^: <right>stosuj czasownik <left>wielokrotnie <right>… gdzie <right>jest określony przez środkowy gerund in (-@[] (1 #~ [), tj. ]tzn. prawy argument przekazany do samej funkcji. Więc co to jest <left>? ...
  • (] , [: +/ [ {. ])Lewy argument do całej frazy jest najpierw przekształcany przez pierwszego gerunda, tj -@[. Oznacza to, że lewy argument tego wyrażenia jest ujemny od lewego argumentu do ogólnej funkcji. Jest to potrzebne, aby fraza [ {. ]wzięła ostatnie elementy z listy zwrotów, którą tworzymy. Te są następnie sumowane: +/. I wreszcie dołączone do tej samej liście zwrotnym: ] ,.
  • Jak więc inicjowana jest lista zwrotna? Właśnie to osiąga trzeci gerund przetwarzania wstępnego: (1 #~ [)- powtórz 1 razy „lewy arg”.

Wypróbuj online!

Jonasz
źródło
0

Mathematica, 59 bajtów

((f@#=1)&/@Range@#;f@n_:=Tr[f[n-#]&/@Range@#];f/@Range@#2)&

Prawdopodobnie będziesz chciał Clear@fmiędzy wywołaniami funkcji. Argumenty są n,x, podobnie jak przypadki testowe.

NumberManiac
źródło
0

Tidy , 36 bajtów

{x,n:n^recur(*tile(x,c(1)),sum@c,x)}

Wypróbuj online!

Wyjaśnienie

{x,n:n^recur(*tile(x,c(1)),sum@c,x)}
{x,n:                              }   lambda taking parameters `x` and `n`
     n^                                take the first `n` terms of...
       recur(                     )        a recursive function
             *tile(x,c(1)),                whose seed is `x` `1`s
                           sum@c,          taking the sum of each window
                                 x         with a window size of `x`
Conor O'Brien
źródło
0

Japt , 18 bajtów

@ZsVn)x}gK=Vì1;K¯U

Wypróbuj online!

Wyjaśnienie:

         K=Vì1        :Start with n 1s in an array K
@      }gK            :Extend K to at least x elements by setting each new element to:
      x               : The sum of
 ZsVn                 : The previous n elements
              ;       :Then
               K¯U    :Return the first n elements of K
Kamil Drakari
źródło