फाइबोनैचि घातांक


11

इस चुनौती के लिए, आपको कुछ संख्याओं के योग का परिणाम प्राप्त करना होगा। ये नंबर क्या हैं? ठीक है, आपको इनपुट ( a, b) दिया जाता है , जो पूर्णांक (सकारात्मक, नकारात्मक, या शून्य) a != b, और a < b, और, aऔर b( और उनके सहित) में प्रत्येक पूर्णांक फाइबोनैचि संख्याओं के अनुसार घातांक होंगे। यह भ्रामक है इसलिए यहाँ एक उदाहरण है:

Input: (-2, 2)
Output: -2**1 + (-1**1) + 0**2 + 1**3 + 2**5 =
          -2  +    -1   +   0  +   1  +   32 = 30

यह देखते हुए कि पहले फाइबोनैचि संख्या द्वारा दर्शाया गया है f(0), सूत्र है:

a**f(0) + ... + b**f(b-a+1) 

इनपुट, प्रोसेसिंग, आउटपुट

उपरोक्त स्पष्ट करने के लिए, यहां कुछ परीक्षण मामले, इनपुट की प्रक्रिया और अपेक्षित आउटपुट दिए गए हैं:

Input: (1, 2)
Processing: 1**1 + 2**1
Output: 3

Input: (4, 8)
Processing: 4**1 + 5**1 + 6**2 + 7**3 + 8**5
Output: 33156

Input: (-1, 2)
Processing: -1**1 + 0**1 + 1**2 + 2**3
Output: 8

Input: (-4, -1)
Processing: -4**1 + -3**1 + -2**2 + -1**3
Output: -4

नियम

  • कोई मानक खामियों की अनुमति नहीं है

  • फैबोनैचि श्रृंखला के अनुसार व्यय क्रम में होने चाहिए

  • कोड को उपरोक्त परीक्षण मामलों के लिए काम करना चाहिए

  • केवल आउटपुट वापस करने की आवश्यकता है

जीत का मानदंड

सबसे छोटा कोड जीतता है!


तो 0यहाँ की संख्या में शामिल नहीं है?
14

0 एक फिबोनाची संख्या नहीं है, लेकिन इनपुट के लिए एक वैध विकल्प है
एंथनी फाम

6
33165 या 33156?
नील

@ मुझे लगता है कि आप सही हैं
एंथनी फाम

यह "ए ए एफ (0) + ... + बी एफ (बी-ए + 1)" से ऊपर है, यह गलत है, उदाहरण के लिए = 1 और बी = 2 के लिए यह 1 एफ (0) +2 एफ (2) होगा )। मुझे लगता है कि एक एफ (0) + ... + बी एफ (बा) होगा; यहाँ f (0) = 0 नहीं 1
RosLuP

जवाबों:


2

05AB1E , 9 बाइट्स

ŸDg!ÅFsmO

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

Ÿ         # Push [a, ..., b].
 Dg!      # Calculate ([a..b].length())! because factorial grows faster than fibbonacci...
    ÅF    # Get Fibonacci numbers up to FACTORIAL([a..b].length()).
      s   # Swap the arguments because the fibb numbers will be longer.
       m  # Vectorized exponentiation, dropping extra numbers of Fibonacci sequence.
        O # Sum.

aऔर b(EG [a..b].length() > 25) के बीच बड़ी विसंगतियों के लिए TIO पर काम नहीं करता है ।

लेकिन यह यहां औसत उत्तर की तुलना में बड़ी संख्या के लिए काम करता है।

अक्षम, क्योंकि यह अप करने के लिए अनुक्रम अनुक्रम की गणना करता है n!, जो कि उत्तर की गणना करने के लिए आवश्यक से अधिक है, जहां nअनुक्रम की लंबाई है a..b


5

गणितज्ञ, 38 बाइट्स 37 बाइट्स 31 बाइट्स

Sum[x^Fibonacci[x-#+1],{x,##}]&

यह सिर्फ rahnema1 का उत्तर है जो कि गणितज्ञ के पास है। नीचे मेरा मूल समाधान है:

Tr[Range@##^Fibonacci@Range[#2-#+1]]&

स्पष्टीकरण:

##सभी तर्कों के अनुक्रम का #प्रतिनिधित्व करता है, पहले तर्क का #2प्रतिनिधित्व करता है, दूसरे तर्क का प्रतिनिधित्व करता है। जब दो तर्कों के साथ बुलाया जाता है , aऔर सूची देगा और समान लंबाई की सूची देगा । के बाद से है , पहले की सूची दे देंगे फिबोनैकी संख्या। के बाद से है , समान अवधि की दो सूचियों पर यह बुला इस पर थ्रेड जाएगा सूचियों। फिर राशि लेता है।bRange[##]{a, a+1, ..., b}Range[#2-#+1]{1, 2, ..., b-a+1}FibonacciListableFibonacci@Range[#2-#+1]b-a+1PowerListableTr

संपादित करें: मार्टिन एंडर को 1 बाइट धन्यवाद से बचाया।


3
आप उपयोग कर सकते हैं Range@##
मार्टिन एंडर

1
अभी प्रासंगिक नहीं है, लेकिन मूल दृष्टिकोण को 3 बाइट्स में सुधार किया जा सकता है Tr[(r=Range@##)^Fibonacci[r-#+1]]&
ग्रेग मार्टिन

Rangeदो बार इस्तेमाल करने से लाल झंडा होना चाहिए था। धन्यवाद!
नेगेनिस

5

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

एक पुनरावर्ती लैम्ब्डा जो लेता है aऔर b(आप भी फिबोनैकी के पहले दो नंबर सेट कर सकते हैं, अलग तर्कों के रूप xऔर y, जो कुछ भी करने के लिए आप चाहते हैं - जानबूझकर नहीं है, लेकिन एक अच्छा फीचर):

f=lambda a,b,x=1,y=1:a<=b and a**x+f(a+1,b,y,x+y)

इसे ऑनलाइन आज़माएं! (परीक्षण सूट शामिल है)

गोल्फ सुझाव का स्वागत करते हैं।


-~aबस और क्यों नहीं a+1? मुझे लगता -~aहै कि मशीन निर्भर है।
टाइटस

4

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

{sum $^a..$^b Z**(1,&[+]...*)}

$^aऔर $^bफ़ंक्शन के लिए दो तर्क हैं; $^a..$^bसे संख्या की सीमा है $^aकरने के लिए $^bहै, जिसके द्वारा घातांक साथ ज़िपित है Z**फाइबोनैचि अनुक्रम के साथ, 1, &[+] ... *

ब्रैड गिल्बर्ट को धन्यवाद दो बाइट्स शेविंग करने के लिए।


(1,&[+]...*)एक बाइट कम है, और Z**जरूरत के बाद अंतरिक्ष नहीं है।
ब्रैड गिल्बर्ट 2

@ ब्रैडगिल्बर्ब २गिल्स कूल, मुझे नहीं पता था कि फिबोनाची अनुक्रम को इस तरह व्यक्त किया जा सकता है।
सीन

वास्तव में यह काम करता है क्योंकि &infix:<+>0,1 या 2 तर्क स्वीकार कर सकते हैं। ( &[+]लेखन का एक छोटा तरीका है &infix:<+>)। जो भी * + *कोडकोड बिल्कुल 2 तर्क स्वीकार करता है। ( &[0]() == 0इसलिए आपके पास 1अनुक्रम को शुरू करने के लिए वहाँ होना चाहिए)
ब्रैड गिल्बर्ट b2gills



3

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

f=(a,b,x=1,y=1)=>a<=b&&a**x+f(a+1,b,y,x+y)

@ फ्लिपकैक के उत्कृष्ट पायथन उत्तर का सीधा पोर्ट।


अच्छा, जावास्क्रिप्ट में भी कम निकला! :)
फ्लिपकार्ट

3

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

f=scanl(+)1(0:f);(?)=sum.zipWith(^)

उपयोग:

$ ghc fibexps.hs -e '[4..8]?f'
33156

आप फ़ंक्शन oको इन्फिक्स ऑपरेटर में बदल सकते हैं , जैसे a#b=sum...
निमि

की तरह एक ... ख माना इन्फ़िक्स था, लेकिन एकल (ℤ, ℤ) स्वीकार करने के लिए आवश्यकता को पढ़ने → ℕ
रोमन Czyborra

कई अन्य उत्तर दो अलग-अलग तर्क देते हैं, इसलिए मुझे लगता है कि यह ठीक है।
०४:

पहले से ही ठीक है, जो हमें ECMAscript7 लैम्ब्डा के बराबर लाता है। लेकिन हम फ़ीड की अनुमति दी जाती है (a,b)के रूप में a?bतो क्यों हम तत्काल के रूप में यह तैयार करने के लिए अनुमति नहीं है [a..b]?fपर (?)=sum.zipWith(^)?
रोमन कैजबोर्रा

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

2

MATL , 23 बाइट्स

&:ll&Gw-XJq:"yy+]JQ$h^s

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

&:      % Binary range between the two implicit inputs: [a a+1 ... b] 
ll      % Push 1, 1. These are the first two Fibonacci numbers
&G      % Push a, b again
w-      % Swap, subtract: gives b-a
XJ      % Copy to cilipboard J
q:      % Array [1 2 ... b-a-1]
"       % For each (repeat b-a-1 times)
  yy    %    Duplicate the top two numbers in the stack
  +     %    Add
]       % End
J       % Push b-a
Q       % Add 1: gives b-a+1
$       % Specify that the next function takes b-a+1 inputs
h       % Concatenate that many elements (Fibonacci numbers) into a row vector
^       % Power, element-wise: each entry in [a a+1 ... b] is raised to the
        % corresponding Fibonacci number
s       % Sum of array. Implicitly display

1

आर, 51 बाइट्स

एक अनाम फ़ंक्शन।

function(a,b)sum((a:b)^numbers::fibonacci(b-a+1,T))


0

रूबी, 46 बाइट्स

->a,b{n=s=0;m=1;a.upto(b){|x|s+=x**n=m+m=n};s}

यहाँ देखने के लिए कुछ भी विशेष रूप से चतुर या मूल नहीं है। माफ़ करना।


मेरे लिए रूबी का निरूपक, ℤ.upto(ℤ)विधि रूबी के ऑल-ऑब्जेक्ट व्यवहार सौंदर्य का एक अच्छा अनुस्मारक है। इसके अलावा कोडिंग को देशी रूबी बोलने वालों के लिए एक अभ्यास के रूप में छोड़ दिया जाता है। क्या आपने अभी तक codegolf.stackexchange.com/questions/363/… स्कैन किया है?
रोमन Czyborra

0

जावा 7, 96 बाइट्स

golfed:

int n(int a, int b){int x=1,y=1,z=0,s=0;while(a<=b){s+=Math.pow(a++,x);z=x+y;x=y;y=z;}return s;}

Ungolfed:

int n(int a, int b)
{
    int x = 1, y = 1, z = 0, s = 0;
    while (a <= b)
    {
        s += Math.pow(a++, x);
        z = x + y;
        x = y;
        y = z;
    }

    return s;
}

0

आर, 57 बाइट्स

x=scan();sum((x[1]:x[2])^numbers::fibonacci(diff(x)+1,T))

बहुत सीधा। gmp::fibnumएक छोटा बिल्ट-इन है, लेकिन यह पूरे अनुक्रम को वापस करने का समर्थन नहीं करता है n, जो numbers::fibonacciतर्क जोड़कर करता है T

पहले मेरे पास एक अधिक मुश्किल समाधान था gmp::fibnumजिसके साथ इस समाधान से 2 बाइट्स लंबे समय तक समाप्त हो गए।

x=scan();for(i in x[1]:x[2])F=F+i^gmp::fibnum((T<-T+1)-1);F

scan()6 बाइट्स बचाने के बजाय एक अनाम फ़ंक्शन का उपयोग करना ; मेरा पोस्ट किया गया समाधान देखें।
06:

आह हाँ, मुझे मूर्ख।
JAD

0

डीसी , 56 बाइट्स

?sf?sa0dsbsg1sc[lblcdlfrdsb^lg+sg+sclf1+dsfla!<d]dsdxlgp

[1,30]51 सेकंड में इनपुट के लिए खत्म । एक बार निष्पादित और ऋणात्मक संख्याओं को दो अलग-अलग पंक्तियों पर ले जाता है, एक डैश के बजाय एक प्रमुख अंडरस्कोर ( _) के साथ नकारात्मक संख्या (यानी -4इनपुट के रूप में होगा _4)।


0

PHP, 77 75 बाइट्स

for($b=$argv[$$x=1];$b<=$argv[2];${$x=!$x}=${""}+${1})$s+=$b++**$$x;echo$s;

कमांड लाइन तर्कों से सीमाएँ लेता है। के साथ चला -nr
PHPc के चर चर को फिर से दिखाना (और I´ve को उनके बारे में पता चला

टूट - फूट

for($b=$argv[$$x=0}=1]; # $"" to 1st Fibonacci and base to 1st argument
    $b<=$argv[2];           # loop $b up to argument2 inclusive
    ${$x=!$x}                   # 5. toggle $x,             6. store to $1/$""
        =${""}+${1}             # 4. compute next Fibonacci number
)
    $s+=$b++**                  # 2. add exponential to sum,    3. post-increment base
        $$x;                    # 1. take current Fibonacci from $""/$1 as exponent
echo$s;                     # print result

FlipTack's का उत्तर PHP में दिया गया 70 बाइट्स हैं:

function f($a,$b,$x=1,$y=1){return$a>$b?0:$a**$x+f($a+1,$b,$y,$x+$y);}

0

Axiom, 65 बाइट्स

f(a,b)==reduce(+,[i^fibonacci(j)for i in a..b for j in 1..b-a+1])

परीक्षण कोड और परिणाम

(74) -> f(1,2)
   (74)  3
                                                   Type: Fraction Integer
(75) -> f(4,8)
   (75)  33156
                                                   Type: Fraction Integer
(76) -> f(-1,2)
   (76)  8
                                                   Type: Fraction Integer
(77) -> f(-4,-1)
   (77)  - 4
                                                   Type: Fraction Integer
(78) -> f(3,1)
   >> Error detected within library code:
   reducing over an empty list needs the 3 argument form
    protected-symbol-warn called with (NIL)

0

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

$e=1;$args[0]..$args[1]|%{$s+=("$_*"*$e+1|iex);$e,$f=($e+$f),$e};$s

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

अनुक्रम करने के लिए थोड़ा बेहतर तरीका मिला, लेकिन इस के लिए अन्य भाषाओं की तुलना में शक्तियां तुलना नहीं करती हैं :)

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