सम फर्स्ट एन सम फाइबोनैचि नंबर


19

ऐसा लगता है कि अभी तक इसके लिए कोई प्रतियोगिता नहीं हुई है।

कार्य सरल है। nफाइबोनैचि अनुक्रम के पहले नंबरों को जोड़ें जो समान हैं और परिणाम को आउटपुट करते हैं।

यह OEIS A099919 द्वारा दिया गया है , सिवाय इसके कि अनुक्रम एक के द्वारा स्थानांतरित किया गया है, fib(1) = 0इसके बजाय के साथ शुरू होता है fib(1) = 1

यह कोड गोल्फ है। सबसे कम बाइट गिनती जीत।

उदाहरण

n sum
1 0
2 2
3 10
4 44
5 188
6 798
7 3382
8 14328
9 60696

सम्बंधित



@EasterlyIrk परीक्षण के मामले उत्तरार्द्ध का अर्थ है, लेकिन यह स्पष्ट रूप से कहा जाना चाहिए।
मेघो

@ मेगो हाँ, मुझे जितना लगा।
R 23:

9
कृपया इतनी जल्दी जवाब स्वीकार न करें। यह केवल एक घंटे का है, गोल्फर जवाब में आ सकता है। संपादित करें: मुझे लगता है कि अब पहले से ही एक छोटा जवाब है जो अभी तक स्वीकार नहीं किया गया है।
R

6
किसी उत्तर को स्वीकार करने से पहले कम से कम एक सप्ताह इंतजार करने की प्रथा है, क्योंकि कई लोग इसे एक संकेत के रूप में व्याख्या करते हैं कि चुनौती अब सक्रिय नहीं है।
जर्गब

जवाबों:


8

ओएसिस , 8 7 5 बाइट्स

1 बाइट ने @ETHProductions की बदौलत और 2 से अधिक बचाया @ Adnan का धन्यवाद!

zc»+U

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

यह मेरे MATL उत्तर के समान पुनरावृत्ति सूत्र का उपयोग करता है।


1
ओएसिस की जानकारी। कहते हैं Uकि कोड के साथ बदल दिया गया है 00, जो आपको एक बाइट बचा सकता है?
ETHproductions

@ETHproductions धन्यवाद! मैं भूल गया कि
लुइस मेंडो

1
अच्छा! आप के 4*साथ zऔर 2+साथ बदल सकते हैं »:)
अदनान

@ अदनान शुक्रिया! मुझे वास्तव में डॉक्टर को पढ़ना चाहिए :-)
लुइस मेंडो

17

पायथन, 33 बाइट्स

c=2+5**.5
lambda n:(7-c)*c**n//20

इसे ऑनलाइन आज़माएं

जादू का फार्मूला!


3
हे भगवान। मुझे यह महसूस करने में अधिक समय लगा कि आपको यह समझ में क्यों आना चाहिए कि आप "टिप्पणी" कर रहे थे कि दूसरी पंक्ति में 20: पी
थियो

@xnor, इस जादू सूत्र का कोई संदर्भ?
चेतन

@ चेतन: संभवतः a(n) = (-10 + (5-3*sqrt(5))*(2-sqrt(5))^n + (2+sqrt(5))^n*(5+3*sqrt(5)))/20(कॉलिन बार्कर, 26 नवंबर 2016) OEIS पृष्ठ से
टाइटस


7

दरअसल , 6 बाइट्स

r3*♂FΣ

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

हर तीसरा फाइबोनैचि संख्या (से शुरू F_0 = 0) सम है। इस प्रकार, पहले nभी फिबोनैकी संख्या रहे हैं F_{i*3}के लिए iमें [0, n)

r3*♂FΣ
r       [0, n)
 3*     multiply each element by 3
   ♂F   retrieve the corresponding element in the Fibonacci sequence
     Σ  sum

7

जावास्क्रिप्ट (ईएस 6), 27 बाइट्स

f=x=>x>1&&4*f(x-1)+f(x-2)+2

बचाव के लिए पुनरावृत्ति! यह OEIS पृष्ठ पर किसी एक सूत्र का उपयोग करता है:

f (n <1) = 0, f (n) = 4 * a (n + 1) + a (n) +2

(लेकिन एक के द्वारा स्थानांतरित किया गया क्योंकि चुनौती इसे एक तरफ से स्थानांतरित करती है)



4

पर्ल 6 ,  38 35  32 बाइट्स

{[+] grep(*%%2,(1,&[+]...*))[^($_-1)]}

कोशिश करो

{[+] grep(*%%2,(0,1,*+*...*))[^$_]}

कोशिश करो

{[+] (0,1,*+*...*)[3,6...^$_*3]}

कोशिश करो

विस्तारित:

{  # bare block lambda with implicit parameter 「$_」

  [+]                       # reduce with 「&infix:<+>」

    ( 0, 1, * + * ... * )\  # fibonacci sequence with leading 0

    [ 3, 6 ...^ $_ * 3 ]    # every 3rd value up to
                            # and excluding the value indexed by
                            # the input times 3

}

3

ऑक्टेव , 36 35 33 बाइट्स

@(n)filter(2,'FAD'-69,(1:n)>1)(n)

इसे ऑनलाइन आज़माएं!

व्याख्या

यह अनाम फ़ंक्शन पुनरावर्ती फ़िल्टर केa(n) = 4*a(n-1)+a(n-2)+2 रूप में अंतर समीकरण को लागू करता है :

Y = filter(B,A,X)वेक्टर में डेटा फिल्टर Xफिल्टर वैक्टर द्वारा वर्णित के साथ Aऔर Bफ़िल्टर किए गए डेटा को बनाने के लिए Y। फ़िल्टर मानक अंतर समीकरण का "डायरेक्ट फॉर्म II ट्रांसपोज़्ड" कार्यान्वयन है:

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

हमारे मामले A = [1 -4 -1]में B = 2, और इनपुट xआउटपुट के अंतिम प्रविष्टि के रूप में प्रदर्शित होने के साथ, एक वेक्टर होना चाहिए y। हालांकि, हम 0इनपुट के पहले मूल्य पर सेट करते हैं ताकि एक प्रारंभिक0 आउटपुट में दिखाई दे, जैसा कि आवश्यक है।

'FAD'-69गुणांक वेक्टर का उत्पादन करने के लिए सिर्फ एक छोटा तरीका है A = [1 -4 -1]; और (1:n)>1इनपुट वेक्टर का उत्पादन करता है x = [0 1 1 ... 1]


3

डीसी , 25 22 बाइट्स

9k5v1+2/3?*1-^5v/0k2/p

इसे ऑनलाइन आज़माएं!

या प्रोग्राम को किसी फाइल में सेव करके टाइप करके चलाएं

dc -f *filename*

कार्यक्रम स्टैडिन पर एक गैर-नकारात्मक पूर्णांक n स्वीकार करता है , और यह पहले के योग को आउटपुट करता है n समबाहु फाइबोनैचि संख्याओं उत्पन्न करता है। (ओबी के उदाहरणों के अनुसार फाइबोनैचि अनुक्रम को 0 से शुरू करने के लिए लिया गया है।)


यह प्रोग्राम पहले n सम फाइबोनैचि संख्याओं के योग के लिए सूत्र (F (3n-1) -1) / 2 का उपयोग करता है, जहाँ F, F (0) = 0, F (1) = द्वारा दिया गया सामान्य Fibnote फ़ंक्शन है। N> = 2 के लिए 1, एफ (एन) = एफ (एन -2) + एफ (एन -1)।


dc एक स्टैक-आधारित कैलकुलेटर है। यहां एक विस्तृत विवरण दिया गया है:

9k  # Sets the precision to 9 decimal places (which is more than sufficient).

5v  # Push the square root of 5

1+  # Add 1 to the number at the top of the stack.

2/  # Divide the number at the top of the stack by 2.

इस बिंदु पर, संख्या (1 + sqrt (5)) / 2 स्टैक के शीर्ष पर है।

3   # Push 3 on top of the stack.

?   # Read a number from stdin, and push it.

\*  # Pop two numbers from the stack, multiply them, and push the product

1-  # Subtract 1 from the number at the top of the stack.

इस बिंदु पर, 3n-1 स्टैक के शीर्ष पर है (जहां n इनपुट है), और (1 + sqrt (5)) / 2 शीर्ष से दूसरा है।

^   # Pop two numbers from the stack (x, then y), compute the power y^x, and push that back on the stack.

5v/ # Divide the top of the stack by sqrt(5).

इस बिंदु पर, ढेर के शीर्ष पर संख्या है (((1 + sqrt (5)) / 2) ^ (3n-1)) / sqrt (5)। इस संख्या का निकटतम पूर्णांक F (3n-1) है। ध्यान दें कि F (3n-1) हमेशा एक विषम संख्या होती है।

0k # Change precision to 0 decimal places.

2/ # Divide the top of the stack by 2, truncating to an integer.

p # Print the top of the stack on stdout.

3

मेथेमेटिका, 27 21 बाइट्स

अनुक्रमणिका को शुरू करने के लिए सही करने के लिए वैकल्पिक सूत्र की ओर इशारा करने के लिए xnor के लिए धन्यवाद

Fibonacci[3#-1]/2-.5&

1
शायद (Fibonacci(3*n+2)-1)/2सूत्र कम हो?
xnor

2

MATL , 15 14 बाइट्स

OOi:"t4*b+2+]x

इसे ऑनलाइन आज़माएं!

व्याख्या

यह OEIS से पुनरावृत्ति फ़ार्मुलों में से एक का उपयोग करता है:

a (n) = 4 * a (n-1) + a (n-2) +2

इनपुट N के लिए कोड N समय को पुनरावृत्त करता है, जो आवश्यक से 2 गुना अधिक है। यह निर्धारित करके के लिए मुआवजा दिया है 0, 0(के बजाय 0, 2) प्रारंभिक मान के रूप में, और पिछले प्राप्त मूल्य को हटाने और पिछले एक प्रदर्शित करके।

OO      % Push two zeros as initial values of a(n-2), a(n-1)
i       % Input N
:"      % Do this N times
  t     %   Duplicate a(n-1)
  4*    %   Multiply by 4
  b+    %   Bubble up a(n-2) and add to 4*a(n-1)
  2+    %   Add 2. Now we have 4*a(n-1)+a(n-2)+2 as a(n), on top of a(n-1)
]       % End
x       % Delete last value, a(n). Implicitly display the remaining value, a(n-1)

2

बैच, 80 बाइट्स

@set/at=x=0,y=1
@for /l %%i in (2,1,%1)do @set/az=x+y,y=z+x,t+=x=y+z
@echo %t%

इस तथ्य का उपयोग करता है कि हर तीसरा फाइबोनैचि संख्या समान है, और बस उन्हें एक समय में तीन की गणना करता है (एक समय में एक से अधिक गणना करना वास्तव में आसान है क्योंकि आपको मूल्यों को स्वैप नहीं करना पड़ता है)। मैंने (Fibonacci(3*n+2)-1)/2सूत्रीकरण की कोशिश की, लेकिन यह वास्तव में कुछ बाइट्स लंबा है ( t+=कोड आकार के मामले में काफी कुशल है)।


2

सी, 82 38 36 बाइट्स

2 बाइट्स @BrainSteel की बदौलत बच गए

OEIS पृष्ठ के सूत्र ने इसे बहुत छोटा बना दिया:

a(n){return--n<1?0:4*a(n)+a(n-1)+2;}

इसे ऑनलाइन आज़माएं!

82 बाइट्स:

x,s,p,n,c;f(N){s=0;p=n=1;c=2;while(n<N){if(~c&1)s+=c,n++;x=p+c;p=c;c=x;}return s;}

पहला संस्करण 75 बाइट्स है, लेकिन फ़ंक्शन पुन: प्रयोज्य नहीं है, जब तक कि आप हमेशा पिछले कॉल से fअधिक के साथ कॉल न Nकरें :-)

x,s,p=1,n=1,c=2;f(N){while(n<N){if(~c&1)s+=c,n++;x=p+c;p=c;c=x;}return s;}

मेरा पहला जवाब यहाँ। किसी अन्य उत्तर की जाँच नहीं की और न ही OEIS की। मुझे लगता है कि कुछ तरकीबें हैं जिन्हें मैं इसे छोटा करने के लिए लागू कर सकता हूं :-)


1
आप चीजों को थोड़ा सा फेरबदल करके इसे छोटा बना सकते हैं: a(n){return--n<1?0:4*a(n)+a(n-1)+2;}(36 बाइट्स)
ब्रेनसैट

1

हास्केल ( 32 31 बाइट्स)

@ChristianSievers को एक बाइट धन्यवाद दिया।

OEIS में दिए गए सूत्र का उपयोग करना: a(n) = 4*a(n-1)+a(n-2)+2, n>1गैरी डेटलेफ़्स द्वारा

a n|n>1=4*a(n-1)+a(n-2)+2|n<2=0


n<=1पूर्णांकों के लिए कहने का एक गोल्फर तरीका है n<2। इसके अलावा, दूसरी स्थिति को पहले (मुहावरेदार otherwiseबस है True) की उपेक्षा करने की आवश्यकता नहीं है , इसलिए कुछ 1<2ऐसा इस्तेमाल किया जाता है जैसे गोल्फिंग में बेकार है ।
क्रिश्चियन सेवर्स

@ChristianSievers वास्तव में n <2 एक स्पष्ट सुधार है, धन्यवाद। दूसरा भी काम करता है, हालांकि यह मुझे इस मामले में कुछ भी नहीं बचाता है। मैं अभी भी हास्केल सीख रहा हूं और मुझे महसूस नहीं हुआ कि मैं उस तरह का गार्ड रख सकता हूं। धन्यवाद!
डायलन मीस

1

गणितज्ञ, ३२ २ 32 बाइट्स

Fibonacci[3Input[]-1]/2-1/2

श्रेय xnor को । जंगवान मिन को धन्यवाद देते हुए 5 बाइट्स बचाए।


निश्चित रूप से गणितज्ञ के पास फाइबोनैचि है और यह (Fibonacci(3*n+2) - 1)/2या तो करने या सुमी लिखने के लिए छोटा है?
xnor

@ जुंगह्वानिन यह साहित्यिक चोरी नहीं है; इसमें OEIS पेज का उल्लेख है। इसके अलावा, यह सामुदायिक विकि के लिए उम्मीदवार नहीं है। देखें कि सामुदायिक विकी का उपयोग कैसे किया जाना चाहिए?
डेनिस

@devRichter अपने पोस्ट को हटाने से क्षमा करें, लेकिन बातचीत करना आवश्यक था। यदि आप इसे हटाए रखना चाहते हैं, तो मुझे बताएं और मैं इस वार्तालाप को चैट रूम में स्थानांतरित कर दूंगा।
डेनिस

@ डेनिस अभी भी, मेरा मानना ​​है कि इसका श्रेय विन्सेन्ज़ो लाइब्रांडी को स्पष्ट रूप से दिया जाना चाहिए - (गलती से मेरी पिछली टिप्पणी को हटा दिया गया ... क्या इसे हटाया नहीं जा सकता?) सामुदायिक पोस्ट सुझाव के लिए, मैं सही हूं।
जुंगवान मिन

मेरा मतलब था कि पोस्ट में उनके नाम का उल्लेख करना ... (या शायद (* Vincenzo Librandi, Mar 15 2014 *)पोस्ट में Mathematica टिप्पणी शामिल करें , जैसा कि यह OEIS पर है।)
जुंगवान मिन

1

आर, 42 बाइट्स

गैर पुनरावर्ती समाधान, @rtrunbull द्वारा यहां पहले के समाधान के विपरीत है

for(i in 1:scan())F=F+gmp::fibnum(3*i-3);F

उस संपत्ति का उपयोग करता है जो फाइबोनैचि अनुक्रम के प्रत्येक तीसरे मूल्य का है। इस तथ्य का भी दुरुपयोग करता है कि Fडिफ़ॉल्ट रूप से परिभाषित किया गया है FALSE=0, इसे मूल्यों को जोड़ने के लिए एक आधार के रूप में अनुमति देता है।


1

आर, 42 41 बाइट्स

sum(DescTools::Fibonacci(3*(scan():2-1)))

scan(): nस्टड से लें ।

scan():2-1: से पूर्णांकों उत्पन्न nकरने 2से, घटती 1, उपज n-1के माध्यम से 1

3*(scan():2-1) : 3 से गुणा करें, क्योंकि हर तीसरे रिट्रेसमेंट नंबर भी है।

DescTools::Fibonacci(3*(scan():2-1)): इन रिट्रेसमेंट नंबर (यानी के 3माध्यम से (n-1)*3) वापस करें।

sum(DescTools::Fibonacci(3*(scan():2-1))) : परिणाम का योग।

पहले, मेरे पास यह निर्बाध समाधान OEIS के सूत्रों में से एक का उपयोग कर था:

a=function(n)`if`(n<2,0,4*a(n-1)+a(n-2)+2)

मैं बिना रिकर्स के आपके बायटेकाउंट का मिलान करने में कामयाब रहा :)
JAD

@JarkoDubbeldam अच्छा! मैंने पुनरावृत्ति को भी कम कर दिया है और एक-बाइट सुधार किया है :)
rturnbull

अच्छा, वास्तव में desctools::fibonacciवह numbers::fibonacciकैंट क्या करता है ? क्योंकि वह धुंध थोड़ी छोटी है।
JAD

अरे कभी नहीं, पाया। मीठी, मुझे जो अन्य कार्यान्वयन मिले, वे एक साथ कई नंबरों के लिए पूछने का समर्थन नहीं करते हैं।
JAD

1
@JarkoDubbeldam Yes, `` gmp :: fibnum '' प्रकार की वस्तुएं लौटाता है bigz, जिसे *applyकार्यों का वर्ग टाइप करने के लिए रूपांतरित करता है raw...
rturnbull


1

PHP, 73 70 बाइट्स

for(${0}=1;$i++<$argv[1];$$x=${0}+${1})${$x^=1}&1?$i--:$s+=$$x;echo$s;

प्रदर्शन चर चर । पर)। के साथ भागो -nr

टूट - फूट

for(${0}=1;         # init first two fibonaccis (${1}=NULL evaluates to 0 in addition)
                    # the loop will switch between $0 and $1 as target.
    $i++<$argv[1];  # loop until $i reaches input
    $$x=${0}+${1}       # 3. generate next Fibonacci
)
    ${$x^=1}            # 1. toggle index (NULL => 1 => 0 => 1 ...)
    &1?$i--             # 2. if current Fibonacci is odd, undo increment
    :$s+=$$x;           #    else add Fibonacci to sum
echo$s;             # print result

PHP में नंबर पूरी तरह से मान्य चर नाम हैं।
लेकिन, शाब्दिक के लिए, उन्हें ब्रेसिज़ की आवश्यकता होती है; यानी ${0}, नहीं $0

36 बाइट्स, O (1)

<?=(7-$c=2+5**.5)*$c**$argv[1]/20|0;

xnor ofs उत्तर का बंदरगाह


0

PARI / GP, 21 बाइट्स

n->fibonacci(3*n-1)\2

\ पूर्णांक भागफल है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.