พิมพ์ลำดับ N-bonacci


54

สิ่งนี้ไม่เป็นที่รู้จักอย่างกว้างขวาง แต่สิ่งที่เราเรียกว่าลำดับฟีโบนักชี AKA

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

จริง ๆ แล้วเรียกว่าลำดับDuonacci เนื่องจากการรับหมายเลขถัดไปคุณจะรวมหมายเลข 2 ก่อนหน้า นอกจากนี้ยังมีลำดับTribonacci

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

เพราะหมายเลขถัดไปคือผลรวมของ 3 หมายเลขก่อนหน้า และลำดับQuadronacci

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

และลำดับของPentanacci ที่ทุกคนชื่นชอบ:

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

และHexanacciลำดับที่Septanacciลำดับที่Octonacciลำดับและอื่น ๆ และอื่น ๆ ขึ้นอยู่กับลำดับ N-Bonacci

ลำดับ N-bonacci มักจะเริ่มต้นด้วยN 1s ในแถว

ความท้าทาย

คุณต้องเขียนฟังก์ชันหรือโปรแกรมที่ใช้ตัวเลขสองตัวเป็นNและXและพิมพ์ตัวเลขX N-Bonacci หมายเลขแรก N จะเป็นจำนวนเต็มมากกว่า 0 และคุณสามารถสันนิษฐานได้ว่าไม่มีตัวเลข N-Bonacci เกินจำนวนชนิดเริ่มต้นในภาษาของคุณ เอาต์พุตสามารถอยู่ในรูปแบบที่มนุษย์สามารถอ่านได้และคุณสามารถป้อนข้อมูลในลักษณะที่สมเหตุสมผล (อาร์กิวเมนต์บรรทัดคำสั่งอาร์กิวเมนต์ของฟังก์ชัน STDIN ฯลฯ )

ตามปกตินี่คือ Code-golf ดังนั้นจึงมีช่องโหว่มาตรฐานและคำตอบที่สั้นที่สุดในการชนะไบต์!

ตัวอย่าง 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

1
ผู้ชายฉันมีความคิดนี้เมื่อไม่นานมานี้และไม่เคยเขียนมันขึ้นมาเลย
Morgan Thrapp

9
ปุ่มโหวตของฉัน == อวาตาร์ของคุณ
ETHproductions

3-bonacci จะไม่1, 1, 2, 4, 7เป็นอย่างที่สาม0 + 1 + 1หรือ? ... และอย่างใดอย่างหนึ่งกับคนอื่น ๆ ?
ร่ม

1
@umbrella No, tribonacci เริ่มต้นด้วย 3 1 วินาที ดูการแก้ไขของฉันเพื่อชี้แจงจุดนี้
DJMcMayhem

คำตอบ:


23

Boolfuck, 6 ไบต์

,,[;+]

คุณสามารถสรุปได้อย่างปลอดภัยว่าหมายเลข N-Bonacci นั้นจะเกินจำนวนชนิดเริ่มต้นในภาษาของคุณ

ประเภทตัวเลขเริ่มต้นใน Boolfuck เป็นบิต สมมติว่าสิ่งนี้ขยายไปถึงหมายเลขอินพุต N และ X และเมื่อ N> 0 มีเพียงสองอินพุตที่เป็นไปได้คือ 10 (ซึ่งไม่มีเอาต์พุตใด) และ 11 (ซึ่งเอาต์พุต 1)

,อ่านบิตในตำแหน่งหน่วยความจำปัจจุบัน N ถูกละเว้นเนื่องจากจะต้องเป็น 1 หาก X เป็น 0 ตัววนลูป (ล้อมรอบด้วย[]) จะถูกข้าม ถ้า X เป็น 1 มันจะถูกส่งออกแล้วพลิกเป็น 0 เพื่อวนซ้ำไม่ได้


4
มีช่องโหว่มาตรฐานแบบนี้ใช่ไหม
Stan Strum

1
@StanStrum ตั้งแต่ก่อนหรือหลังคำตอบนี้?
user253751

2
ฉันเชื่อว่ามันมาก่อนให้ฉันตรวจสอบ ... ลิงค์ Meta ; การแก้ไขครั้งแรกคือ 31 มกราคม 2016 เวลา 13:44 ว้าวไม่เป็นไร! ฉันหยุดสองวัน แม้ว่าจะดื้อรั้นการแก้ไขล่าสุดสำหรับเรื่องนี้คือ 31 มกราคม 2016 เวลา 16:06 Soooooo ใช่มันเป็นเรื่องปกติในหนังสือของฉัน
Stan Strum


8

Pyth, 13

<Qu+Gs>QGEm1Q

ชุดทดสอบ

แยกอินพุตบรรทัดใหม่ด้วยnอันดับแรก

คำอธิบาย:

<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

1
ว้าวนั่นเร็วมาก ฉันแทบจะไม่มีเวลาปิดเบราว์เซอร์ก่อนที่คุณจะโพสต์นี้!
DJMcMayhem

5

Haskell, 56 ไบต์

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

ตัวอย่างการใช้งาน: ->3 # 8[1,1,1,3,5,9,17,31]

มันทำงานอย่างไร

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

ไม่ควรที่จะเป็นtail lแทนinit l?
ภูมิใจ Haskeller

@proudhaskeller: มันไม่สำคัญ เราเก็บnองค์ประกอบสุดท้ายไว้ในรายการ ไม่มีความแตกต่างระหว่างการนำออกจากปลายและเพิ่มไปข้างหน้าและทางอื่น ๆ เช่นลบออกจากด้านหน้าและเพิ่มไปยังจุดสิ้นสุดเนื่องจากรายการเริ่มต้นประกอบด้วยเฉพาะ1s
nimi

โอ้ฉันเข้าใจละ. นั่นเป็นวิธีที่ดีที่จะแทนที่++[]ด้วย:!
ภูมิใจ Haskeller

@proudhaskeller: ใช่แน่นอน!
nimi

5

Python 2, 55 ไบต์

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

ติดตามnหน้าต่างความยาวของลำดับในรายการlอัปเดตโดยผนวกผลรวมและลบองค์ประกอบแรก พิมพ์องค์ประกอบแรกแต่ละการวนซ้ำสำหรับxการวนซ้ำ

วิธีการที่แตกต่างกันในการจัดเก็บองค์ประกอบทั้งหมดและการสรุปnค่าสุดท้ายให้ความยาวเท่ากัน (55)

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

5

Javascript ES6 / ES2015, 107 97 85 80 ไบต์

ขอบคุณ @ user81655, @Neil และ @ETHproductions สำหรับการบันทึกจำนวนไบต์


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

ลองออนไลน์


กรณีทดสอบ:

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

1
ดี คู่ของเคล็ดลับการเล่นกอล์ฟ A: forอยู่เสมอดีกว่าwhile, x.split('')-> [...x], ~~a-> +a, n-=1-> n--ถ้าคุณใส่ร่างกายทำงานทั้งในคุณไม่จำเป็นต้องเขียนeval returnนอกจากนี้แม้จะสั้นกว่า[...'1'.repeat(i)]เป็นArray(i).fill(1)และคุณสามารถลบ~~จากและa และคุณจะได้รับอนุญาตในการลบb f=
user81655

2
นี่คือสิ่งที่ดูเหมือนว่ามีเคล็ดลับของฉัน (85 (i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));l")bytes): ผมเปลี่ยนคำสั่งของงบที่รวมกันn--เข้าn-iและลบออกlจากการขัดแย้งที่จะบันทึกไบต์พิเศษไม่กี่
user81655

1
@ user81655 ฉันไม่ได้รับการevalบันทึก (i,n)=>{for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));return l}ยังคงเป็น 85 ไบต์
Neil

@Neil ดูเหมือนว่า 86 bytes to me ...
user81655

3
l.slice(-i).reduce((a,b)=>a+b)=>eval(l.slice(-i).join`+`)
ETHproductions

4

ES6, 66 ไบต์

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

น่าเศร้าที่mapจะไม่ให้คุณเข้าถึงอาร์เรย์ผลลัพธ์ในการติดต่อกลับ


1
บันทึก byte โดยการพารามิเตอร์พารามิเตอร์
Shaggy

4

เยลลี่ 12 ไบต์

ḣ³S;
b1Ç⁴¡Uḣ

ลองออนไลน์!

มันทำงานอย่างไร

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.

3

C ++ 11, 360 ไบต์

สวัสดีฉันแค่ชอบคำถามนี้ ฉันรู้ว่า c ++ เป็นภาษาที่ยากมากที่จะชนะการแข่งขันครั้งนี้ แต่ฉันจะโยนเล็กน้อยเล็กน้อย แต่อย่างใด

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

ฉันจะปล่อยให้นี่เป็นคำอธิบายที่สามารถอ่านได้ของรหัสข้างต้น

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

ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนาและรหัสกอล์ฟ นี่เป็นคำตอบที่ดี แต่ฉันสังเกตว่าคุณมีช่องว่างมากมายและชื่อตัวแปรและฟังก์ชันที่ยาวเกิน 1 อักขระ นี่เป็นโค้ดที่อ่านได้ดีแต่คุณควรเพิ่มเวอร์ชันที่เล่นกอล์ฟ เมื่อคุณทำฉันจะให้ upvote แต่จนกว่ามันจะกอล์ฟฉันจะไม่
wizzwizz4

@ wizzwizz4 สวัสดีเพิ่มรหัส golfed ของรหัสด้านบน ฉันออกจากโค้ดที่ไม่มีการล้อมรอบเพื่อให้คนอื่นเห็นว่าฉันทำได้อย่างไร นอกจากนี้ฉันชอบอ่านฟังก์ชั่น bonacci ที่คืนค่า vi ซึ่งยังฟังดูเหมือน vibonacci ฉันรู้สึกว่าฉันไม่ควรทำให้ฟังก์ชั่นหลักสั้นลงเพราะเอกสารมาตรฐานที่ใช้ int main (int, char **) เป็นจุดเริ่มต้นของโปรแกรม ต่อไปฉันเชื่อว่าตัวแปรทั้งหมดมีความยาวสูงสุด 1 ตัวอักษรและลบช่องว่างที่ไม่สำคัญออกไป
hetepeperfan

3
นี่ไม่ใช่รหัส - "ปฏิบัติตามมาตรฐาน" นี่คือรหัสกอล์ฟ เราจัดการและใช้ประโยชน์จากภาษาของเรา หากตัวแปรใด ๆints intลบ หากมีการเรียกใช้ฟังก์ชันใด ๆ ให้เรียกใช้ฟังก์ชันfooเหล่าfนั้น ใจร้าย ละเว้นมาตรฐานและใช้ประโยชน์จากคอมไพเลอร์ นั่นคือวิธีที่คุณเล่นกอล์ฟ
wizzwizz4

เล่นและรหัสที่ดีอยู่ในรหัส ungolfed เท่านั้น แต่อย่าลังเลที่จะเก็บมันไว้ที่นั่น จริง ๆ แล้วขอแนะนำให้ แต่จงตั้งใจให้คอมไพเลอร์จริงๆเมื่อคุณตีรหัสของคุณ รับมันเล็กที่สุดไม่ว่าอะไรจะเกิดขึ้น (โอ้และนี่คือ +1 ที่ฉันสัญญาไว้!)
wizzwizz4

@ wizzwizz4 การลบ "int" ถูกต้องหรือไม่ ฉันคิดว่า int จะไม่ทำงาน
DJMcMayhem

3

Haskell , 47 ไบต์

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

ลองออนไลน์!

<$ อาจถูกนำเข้าสู่โหมโรงหลังจากการโพสต์ความท้าทายนี้


Haskell , 53 ไบต์

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

ลองออนไลน์!

กำหนดฟังก์ชั่นไบนารีที่ใช้เช่น?3?8 == [1,1,1,3,5,9,17,31]

ฟังก์ชั่นเสริม%ค้นหาiองค์ประกอบที่nซ้ำของลำดับ -bonacci ซ้ำโดยการรวมnค่าก่อนหน้านี้ จากนั้นฟังก์ชั่น?tabulates แรกค่าx%


คำตอบเก่า แต่คุณหมายถึง "ฟังก์ชั่นเสริม%" หรือไม่?
Conor O'Brien

การสลับยามที่จะเปิดเข้าไปi<=n i>n
Ørjan Johansen

@ ØrjanJohansenฉันสังเกตเห็นว่าเมื่อแก้ไขเช่นกันถึงแม้ว่าการมองย้อนกลับไปดูวิธีการทั้งหมดดูเหมือนว่าไม่ดีดังนั้นฉันอาจทำกอล์ฟทั้งหมดอีกครั้ง
xnor

2

APL, 21

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

นี่คือฟังก์ชั่นที่รับnเป็นอาร์กิวเมนต์ด้านซ้ายและxเป็นอาร์กิวเมนต์ที่ถูกต้อง

คำอธิบาย:

{⍵↑⍺{⍵,+/⍺↑⌽⍵}⍣⍵+⍺/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

กรณีทดสอบ:

      ↑⍕¨ {⍵↑⍺{⍵,+/⍺↑⌽⍵}⍣⍵+⍺/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              

2

Python 3, 59

บันทึก 20 ไบต์ขอบคุณ FryAmTheEggman

ไม่ใช่วิธีการแก้ปัญหาที่ดี แต่มันจะใช้งานได้ในตอนนี้

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

นอกจากนี้ต่อไปนี้เป็นกรณีทดสอบ:

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]

2

Java, 82 + 58 = 140 ไบต์

ฟังก์ชั่นเพื่อค้นหาหมายเลขith n -bonacci ( 82 ไบต์ ):

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

ฟังก์ชั่นพิมพ์หมายเลขk n -bonacci แรก( 58 ไบต์ ):

(k,n)->{for(int i=0;i<k;i++){System.out.println(f(i,n));}}

2

Brain-Flak , 144 124 122 ไบต์

-20 ไบต์ขอบคุณNitroden

นี่เป็นคำตอบ Brain-Flak คำตอบแรกของฉันและฉันแน่ใจว่าสามารถปรับปรุงได้ ความช่วยเหลือใด ๆ ที่ชื่นชม

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

ลองออนไลน์!



1

Julia, 78 ไบต์

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

นี่คือฟังก์ชั่นที่ยอมรับสองจำนวนเต็มและส่งกลับอาร์เรย์จำนวนเต็ม วิธีการง่ายๆคือ: สร้างอาร์เรย์ของคนที่มีความยาวnแล้วเติบโตอาร์เรย์โดยการเพิ่มผลรวมของก่อนหน้านี้องค์ประกอบจนกว่าอาร์เรย์มีความยาวnx

Ungolfed:

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

1

MATL , 22 26ไบต์

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

สิ่งนี้ใช้รีลีสปัจจุบัน (10.2.1)ของภาษา / คอมไพเลอร์

ลองออนไลน์!

ไบต์พิเศษไม่กี่ :-( เนื่องจากข้อผิดพลาดในGฟังก์ชั่น (วางอินพุตตอนนี้แก้ไขสำหรับรุ่นถัดไป)

คำอธิบาย

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

1

Perl 6 , 38 ไบต์

->\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
}

การใช้งาน:

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

1

C, 132 ไบต์

วิธีการเรียกซ้ำจะสั้นลงสองสามไบต์

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

Ungolfed

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

1

Husk , 9 ไบต์

↑§¡ȯΣ↑_B1

ลองออนไลน์!

เริ่มต้นจากBase- 1ตัวแทนของN (เพียงรายการยังไม่มีคน) และ¡ผลรวม teratively ( Σ) สุดท้าย ( ↑_) ไม่มีองค์ประกอบและผนวกผลให้รายการ สุดท้ายใช้ ( ) ตัวเลขXแรกในรายการนี้และส่งกลับ





0

Perl 6, 52 ~ 72 47 ~ 67 ไบต์

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

ต้องการโมดูลMONKEY-SEE-NO-EVALเนื่องจากข้อผิดพลาดต่อไปนี้:

=== ขออภัย! === ข้อผิดพลาดขณะรวบรวม -e
EVAL เป็นฟังก์ชั่นที่อันตรายมาก !!! (ใช้ MONKEY-SEE-NO-EVAL เพื่อแทนที่
แต่ถ้าคุณมั่นใจว่าข้อมูลของคุณไม่มีการโจมตีด้วยการฉีด)
ที่ -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

ฉันคิดว่าถ้าคุณใช้การเปิดตัว Perl 6 ก่อนคริสต์มาสปี 2015 มันไม่ได้บังคับให้ลิงไม่มีการเห็นเลย
แบทแมน


0

Jq 1.5 , 67 ไบต์

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

ถือว่าอินพุตที่จัดทำโดย N และ X เช่น

def N: 5;
def X: 11;

ขยาย

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

ลองออนไลน์!


0

J, 31 ไบต์

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

Ungolfed:

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

คำอธิบาย

เวลาสนุกกับกริยากำลังในรูปแบบ gerund :

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

รายละเอียดแยกย่อย:

  • ] {. ...นำ<right arg>องค์ประกอบแรกจากทุกสิ่งนี้ไปทางขวาที่ใช้งานได้ ...
  • <left> ^: <right>ใช้กริยา<left>ซ้ำหลาย<right>ครั้ง ... ที่<right>ระบุโดย gerund กลางใน(-@[] (1 #~ [)เช่น]คือคือ ARG ด้านขวาส่งผ่านไปยังฟังก์ชั่นของตัวเอง แล้วอะไร<left>ล่ะ? ...
  • (] , [: +/ [ {. ])อาร์กิวเมนต์ซ้ายของวลีนี้ทั้งหมดถูกเปลี่ยนเป็นครั้งแรกโดย gerund แรกเช่น-@[. นั่นหมายความว่าอาร์กิวเมนต์ซ้ายของวลีนี้คือค่าลบของอาร์กิวเมนต์ซ้ายไปยังฟังก์ชันโดยรวม สิ่งนี้จำเป็นเพื่อให้วลี[ {. ]ใช้องค์ประกอบสุดท้ายจากรายการส่งคืนที่เรากำลังสร้างขึ้น สิ่งเหล่านั้นจะถูกรวมเข้าด้วยกัน: +/. ] ,และในที่สุดก็ผนวกเข้ากับรายการผลตอบแทนที่เดียวกัน
  • ดังนั้นรายการส่งคืนจะเริ่มต้นอย่างไร นั่นคือสิ่งที่ gerund การประมวลผลล่วงหน้าครั้งที่สามประสบความสำเร็จ: (1 #~ [)- ทำซ้ำ 1 "arg ซ้าย" หลายครั้ง

ลองออนไลน์!


0

Mathematica, 59 ไบต์

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

คุณอาจต้องการClear@fระหว่างการเรียกใช้ฟังก์ชัน อาร์กิวเมนต์เป็นn,xเช่นเดียวกับกรณีทดสอบ



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.