नकारात्मक फाइबोनैचि संख्या


28

आप शायद सभी को अनुक्रम अनुक्रम जानते हैं:

fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)
fibonacci(0)=0
fibonacci(1)=1

आपका कार्य जितना आसान हो सकता है उतना ही आसान है:

  • पूर्णांक Nगणना को देखते हुएfibonacci(n)

लेकिन यहाँ ट्विस्ट है:

  • नकारात्मक भी करें N

रुकिए। क्या?

fibonacci(1)=fibonacci(0)+fibonacci(-1)

इसलिए

fibonacci(-1)=1

तथा

fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1

और इसी तरह...

  • यह बाइट्स जीत में एक इतना छोटा प्रोग्राम है।
  • आप एक फ़ंक्शन या पूर्ण प्रोग्राम सबमिट कर सकते हैं
  • एन [-100,100] में है

CSV में टेस्टकेस:

-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8
34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21

संकेत:

n <0 और n & 1 == 0:

fibonacci(n)=fibonacci(abs(n))*-1


नहीं। खान आपको नकारात्मक संख्याओं का समर्थन करना चाहता है।
रोमन ग्रेफ

7
मुझे लगता है कि यह कोई धोखा नहीं है। मौजूदा फाइबोनैचि चुनौती के पहले पृष्ठ पर उत्तरों में से, केवल 1 नकारात्मक को संभाल सकता है, और बाकी सभी को पीछे की ओर भी जाने के लिए महत्वपूर्ण रूप से बदलना होगा।
xnor

कुछ जोड़ा। अधिक जोड़ने के लिए स्वतंत्र महसूस करें। @ फेल
रोमन ग्रैफ़

1
प्रारूपण परीक्षण मामलों के बारे में यह मेटा पोस्ट पढ़ें : फैंसी तालिकाओं से बचने की कोशिश करें
फ्लिपकार्ट

और CSV से आपका मतलब है SSV (अर्धविराम से अलग किए गए मान)?
एनएच।

जवाबों:


22

गणितज्ञ, 9 बाइट्स

Fibonacci

हां, यह अंतर्निहित फ़ंक्शन नकारात्मक संख्याओं का समर्थन करता है।


2
यह लगभग शब्द-दर-शब्द है जिसका उत्तर मैं पोस्ट करने के लिए आ रहा था: D
ग्रेग मार्टिन

17

ऑक्टेव, 20 बाइट्स

 @(n)([1,1;1,0]^n)(2)

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

व्याख्या

यह इस तथ्य का उपयोग करता है कि फ़ोटोग्राफ़ी अनुक्रम f(n)को लिखा जा सकता है (यह एक मैट्रिक्स वेक्टर संकेतन होना चाहिए):

रिकर्सिवली:

[f(n+1)]  = [1  1] * [f(n)  ]
[f(n)  ]    [1  0]   [f(n-1)]

स्पष्ट रूप से:

[f(n+1)]  = [1  1] ^n * [1]
[f(n)  ]    [1  0]      [0]

इसका मतलब है कि इस मैट्रिक्स की शक्ति के लिए शीर्ष सही प्रविष्टि nवह मान है जिसकी f(n)हम तलाश कर रहे हैं। जाहिर है हम इस मैट्रिक्स को भी उल्टा कर सकते हैं क्योंकि इसमें पूरी रैंक है, और यह रिश्ता अभी भी उसी पुनरावृत्ति संबंध का वर्णन करता है। इसका मतलब है कि यह नकारात्मक इनपुट के लिए भी काम करता है।


1
(कैसे) यह भी नकारात्मक इनपुट के लिए काम करता है?
रोमन ग्रैफ

हाँ, स्पष्टीकरण आ रहा है ...
त्रुटी

ans(-6)सकारात्मक होने का मतलब है?
फ्लिपकैक

@FlipTack क्षमा करें, यह इंडेक्स शिफ्ट होने के कारण हो सकता है। मैंने 1-आधारित का उपयोग किया, जबकि प्रश्न 0-आधारित का उपयोग करता था, मैंने इसे अब ठीक कर दिया।
दोष

13

मैक्सिमा, 3 बाइट्स

 fib

सकारात्मक और नकारात्मक संख्याओं का समर्थन करता है।

CESGA पर इसे (पेस्ट) आज़माएं - मैक्सिमा ऑन लाइन


क्या आप भाषा से लिंक जोड़ सकते हैं?
पावेल

बेशक एक ऑनलाइन कैलकुलेटर के लिए एक लिंक जोड़ा!
rahnema1

इसके अलावा वोल्फ्रामअल्फा
थुंडा

11

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

g=5**.5/2+.5
lambda n:(g**n-(1-g)**n)/5**.5

सुनहरे अनुपात के साथ एक सीधा सूत्र g। साथ fऊपर समारोह:

for n in range(-10,11):print f(n) 

-55.0
34.0
-21.0
13.0
-8.0
5.0
-3.0
2.0
-1.0
1.0
0.0
1.0
1.0
2.0
3.0
5.0
8.0
13.0
21.0
34.0
55.0

समान लंबाई, केवल 5 के वर्गमूल को अलियास करते हुए:

a=5**.5
lambda n:((a+1)**n-(1-a)**n)/a/2**n

मुझे एक पुनरावर्ती कार्य करने का कोई तरीका नहीं मिला जो इनसे प्रतिस्पर्धा कर सके। 57 बाइट्स के लिए एक मामूली गोल्फ प्रयास:

f=lambda n:n<0and(-1)**n*f(-n)or n>1and f(n-1)+f(n-2)or n

तुलना के लिए, एक पुनरावृत्ति विधि (पायथन 2 में 60 बाइट्स):

n=input()
a,b=0,1;exec"a,b=b,a+b;"*n+"a,b=b-a,a;"*-n
print a

या, 58 बाइट्स के लिए:

n=input()
a,b=0,1;exec"a,b=b,a+cmp(n,0)*b;"*abs(n)
print a

10

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

f=n=>n<2?n<0?f(n+2)-f(n+1):n:f(n-2)+f(n-1)

परीक्षा


मुझे वास्तव में आपका कार्य पसंद है। यहाँ मेरा एक सुझाव था, लेकिन मैंने एक अनदेखी की, तो यह काम नहीं करेगा ...
ल्यूक

5

MATL , 11 9 बाइट्स

मैं खुश हूँ [3,2], जो निश्चित रूप से गोल्फ हो सकता है, अगर किसी को कोई रास्ता पता हो तो कृपया मुझे बताएं =) (इसके साथ काम भी होगा [1,3]।) धन्यवाद @LuisMendo -2 बाइट्स के लिए =)

IHhBiY^2)

यह उसी दृष्टिकोण का उपयोग कर रहा है जैसे कि ऑक्टेव एंसर । लेकिन मैट्रिक्स उत्पन्न करने के लिए

[1,1]
[1,0]

हम सिर्फ बातचीत संख्या 3और 2दशमलव से बाइनरी (यानी करने के लिए 11और 10)।

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


5

जावास्क्रिप्ट (ईएस 7) 37 बाइट्स

बिनेट के फॉर्मूला का उपयोग करता है ।

n=>((1+(a=5**.5))**n-(1-a)**n)/a/2**n

यह nवें फाइबोनैचि संख्या + को आउटपुट करता है 0.0000000000000005


**ES7 की आवश्यकता है।
नील

ओह, लगा कि यह ES6 का हिस्सा है, लेकिन आप सही हैं। उसे बदल दिया। मैंने 1 बी सेव के लिए बिनेट के फॉर्मूला के दूसरे संस्करण का भी उपयोग किया।
ल्यूक

अब मैं इसके बारे में सोचो, बस का उपयोग कर कि 1-pबजाय -1/pएक ही बचत के लिए काम किया जाना चाहिए था।
नील

3

जोल्फ, 2 बाइट्स

mL

यहाँ यह कोशिश करो!

फ़ार्मेन्ट बिलिन, phiसूत्र का उपयोग करके कार्यान्वित किया गया ।


बिना पढ़ा हुआ वाक्य रचना: अप्रत्याशित टोकन | पी (math.min.js: 27) पी (math.min.js: 27) पर नए फंक्शन (<अनाम>) पर टाइप किया हुआ (पी पर गणित) (math.min.js: 27), <अनाम>: 36.14) Object.n पर [as factory] (math.min.js: 45) t पर (math.min.js: 27) f पर (math.min.js: 27) Object.get पर [मध्यस्थ के रूप में] ] (math.min.js: 27) क्लोन पर (rawgit.com/ConorOBrien-Foxx/Jolf/master/src/jolf.js:902) rawgit.com/ConorOBrien-Foxx/Jolf/master/src/jolf पर। js: 2128 (नवीनतम Google Chrome, संस्करण 55.0.2883.87m)
इस्माइल मिगुएल

@IsmaelMiguel यह केवल फ़ायरफ़ॉक्स पर काम करना चाहिए
कॉनर ओ'ब्रायन

मुझे पता नहीं था, यह कहीं भी नहीं है
इस्माईल मिगुएल

2

हास्केल, 51 बाइट्स

s=0:scanl(+)1s;f z|even z,z<0= -f(-z);f z=s!!abs z

1
एक गार्ड के अनेक परीक्षणों के साथ जोड़ा जा सकता है ,के बजाय &&: even z,z<0
nimi

1

पॉवरशेल , 112 बाइट्स

function f($n){$o=('-','+')[$n-lt0];&(({$a,$b=(2,1|%{f("$n$o$_"|iex)});"$a- $o$b"|iex},{$n*$n})[$n-in(-1..1)])}

डेमो कॉल:

-9..9 | %{"{0,2}`t=> {1,3}" -f $_,(f($_))} 

डेमो का आउटपुट:

-9  =>  34
-8  => -21
-7  =>  13
-6  =>  -8
-5  =>   5
-4  =>  -3
-3  =>   2
-2  =>  -1
-1  =>   1
 0  =>   0
 1  =>   1
 2  =>   1
 3  =>   2
 4  =>   3
 5  =>   5
 6  =>   8
 7  =>  13
 8  =>  21
 9  =>  34

1

लिथप , 88 बाइट्स

#N::((if(< N 2)((if(< N 0)((-(f(+ N 2))(f(+ N 1))))((+ N))))((+(f(- N 2))(f(- N 1))))))

मेरी नज़र उन सभी कोष्ठकों पर है

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

वास्तव में बहुत छोटा नहीं है। वर्तमान में एक पार्सिंग बग है जिसका उपयोग करने के लिए (get N)या (+ N)बस के बजाय एक की आवश्यकता होती है N। मैंने छोटे को चुना। हालाँकि मुझे नहीं लगता कि ऐसा कुछ भी हो सकता है जो इसे आगे बढ़ाने के लिए किया जा सकता है।

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