Fibonacci-Exponenten

11

Für diese Herausforderung müssen Sie das Ergebnis der Summe einiger Zahlen ausgeben. Was sind diese Zahlen? Nun, Sie erhalten eine Eingabe ( a, b), die Ganzzahlen (positiv, negativ oder null) sind a != b, und a < b, und jede Ganzzahl innerhalb aund b(einschließlich dieser) hat Exponenten gemäß den Fibonacci-Zahlen. Das ist verwirrend. Hier ist ein Beispiel:

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

Da die erste Fibonacci-Zahl durch dargestellt wird f(0), lautet die Formel:

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

Eingabe, Verarbeitung, Ausgabe

Um dies zu verdeutlichen, sind hier einige Testfälle, die Verarbeitung der Eingabe und die erwarteten Ausgaben aufgeführt:

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

Regeln

  • Keine Standardlücken erlaubt

  • Exponenten müssen gemäß der Fibonacci-Reihe in Ordnung sein

  • Der Code muss für die oben genannten Testfälle funktionieren

  • Es muss nur die Ausgabe zurückgegeben werden

Gewinnkriterien

Der kürzeste Code gewinnt!

Anthony Pham
quelle
0Ist das hier also nicht in den Fibonacci-Zahlen enthalten?
FlipTack
0 ist keine Fibonacci-Zahl, aber eine gültige Wahl für die Eingabe
Anthony Pham
6
33165 oder 33156?
Neil
@ Neil Ich denke, Sie haben Recht
Anthony Pham
Dies über "a f (0) + ... + b f (b-a + 1)" ist falsch, zum Beispiel für a = 1 und b = 2 wäre es 1 f (0) + 2 f (2) ). Ich denke wäre a f (0) + ... + b f (ba); hier f (0) = 0 nicht 1
RosLuP

Antworten:

2

05AB1E , 9 Bytes

ŸDg!ÅFsmO

Probieren Sie es online aus!

Ÿ         # 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.

Funktioniert nicht mit TIO bei großen Abweichungen zwischen aund b(EG [a..b].length() > 25).

Aber es scheint für größere Zahlen als die durchschnittliche Antwort hier zu funktionieren.

Ineffizient, weil es die Fibonacci-Sequenz bis zu berechnet n!, was mehr ist, als zur Berechnung der Antwort erforderlich ist, wobei ndie Länge der Sequenz von a..b.

Magische Krakenurne
quelle
5

Mathematica, 38 Bytes 37 Bytes 31 Bytes

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

Dies ist nur die Antwort von rahnema1, die auf Mathematica portiert wurde. Unten ist meine ursprüngliche Lösung:

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

Erläuterung:

##repräsentiert die Reihenfolge aller Argumente, #repräsentiert das erste Argument, #2repräsentiert das zweite Argument. Wenn mit zwei Argumenten aund aufgerufen b, Range[##]wird die Liste {a, a+1, ..., b}und Range[#2-#+1]die Liste mit der gleichen Länge angegeben {1, 2, ..., b-a+1}. Da Fibonacciist Listable, Fibonacci@Range[#2-#+1]wird eine Liste der ersten b-a+1Fibonacci-Zahlen geben. Da Powerist Listable, wird es auf zwei Listen gleicher Länge nennt es fädelt die Listen über. Dann Trnimmt die Summe.

Bearbeiten: 1 Byte dank Martin Ender gespeichert.

Genisis
quelle
3
Sie können verwenden Range@##.
Martin Ender
1
Nicht so relevant jetzt, aber der ursprüngliche Ansatz kann um 3 Bytes verbessert werden Tr[(r=Range@##)^Fibonacci[r-#+1]]&.
Greg Martin
Die Rangezweimalige Verwendung sollte eine rote Fahne gewesen sein. Vielen Dank!
Genisis
5

Python , 49 Bytes

Eine rekursive Lambda , das dauert aund bals separate Argumente (Sie können auch die ersten beiden Zahlen der Fibonacci gesetzt, xund y, auf das, was Sie wollen - nicht absichtlich, aber ein nettes Feature):

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

Probieren Sie es online aus! (inklusive Testsuite)

Golfvorschläge willkommen.

FlipTack
quelle
Warum -~aund nicht einfach a+1? Ich denke -~aist maschinenabhängig.
Titus
4

Perl 6 , 32 30 Bytes

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

$^aund $^bsind die beiden Argumente für die Funktion; $^a..$^bist der Zahlenbereich von $^abis $^b, der durch Exponentiation Z**mit der Fibonacci-Sequenz gezippt wird 1, &[+] ... *.

Vielen Dank an Brad Gilbert für das Rasieren von zwei Bytes.

Sean
quelle
(1,&[+]...*)ist ein Byte kürzer und der Platz danach Z**wird nicht benötigt.
Brad Gilbert b2gills
@ BradGilbertb2gills Cool, ich hatte keine Ahnung, dass die Fibonacci-Sequenz so ausgedrückt werden kann.
Sean
Eigentlich funktioniert es, weil &infix:<+>0,1 oder 2 Argumente akzeptiert werden können. ( &[+]ist eine kurze Schreibweise &infix:<+>). Der WhateverCode * + *akzeptiert genau 2 Argumente. ( &[0]() == 01
Also
3

Maxima, 32 Bytes

f(a,b):=sum(x^fib(x-a+1),x,a,b);
rahnema1
quelle
3

Pyke, 11 Bytes

h1:Foh.b^)s

Probieren Sie es hier aus!

h1:         -   range(low, high+1)
   F     )  -  for i in ^:
    oh      -     (o++)+1
      .b    -    nth_fib(^)
        ^   -   i ** ^
          s - sum(^)
Blau
quelle
3

JavaScript (ES7), 42 Byte

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

Unkomplizierter Port der exzellenten Python-Antwort von @ FlipTack.

Neil
quelle
Schön, in JavaScript noch kürzer geworden! :)
FlipTack
3

Haskell, 35 Bytes

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

Verwendung:

$ ghc fibexps.hs -e '[4..8]?f'
33156
Roman Czyborra
quelle
Sie können die Funktion oin einen Infix-Operator wie z a#b=sum....
Nimi
Hatte Infix als a… b betrachtet, aber die Anforderung gelesen, unär zu akzeptieren (ℤ, ℤ) → ℕ
Roman Czyborra
Viele andere Antworten haben zwei getrennte Argumente, daher denke ich, dass es in Ordnung ist.
Nimi
Okay, das bringt uns auf das Niveau des ECMAscript7 Lambda. Aber wenn wir Futter erlaubt sind , (a,b)wie a?bdann , warum wir sind nicht erlaubt es als unmittelbare Vorbereitung [a..b]?fauf (?)=sum.zipWith(^)?
Roman Czyborra
Ich denke das geht zu weit. Die Eingabe besteht aus zwei Zahlen (nicht unbedingt als Paar, zwei separate Argumente reichen aus), aber Sie geben Ihrer Hauptfunktion eine Liste mit Zahlen und eine Funktion.
Nimi
2

MATL , 23 Bytes

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

Probieren Sie es online aus! Oder überprüfen Sie alle Testfälle .

&:      % 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
Luis Mendo
quelle
1

R, 51 Bytes

Eine anonyme Funktion.

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

Gelee , 13 Bytes

ạµ1+⁸С0
r*çS

Probieren Sie es online aus!

Lynn
quelle
Schön, die einzige andere Antwort, die ich gefunden habe, wo eine Eingabe von f(1,25)funktioniert;). +1
Magic Octopus Urn
0

Ruby, 46 Bytes

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

Hier gibt es nichts besonders Kluges oder Originelles zu sehen. Es tut uns leid.

GB
quelle
Für mich, der kein Ruby-Sprecher ist, ist die ℤ.upto(ℤ)Methode eine schöne Erinnerung an Rubys Schönheit des Verhaltens aller Objekte. Weiteres Golfen Der Code wird als Übung den Ruby-Muttersprachlern überlassen. Haben Sie schon codegolf.stackexchange.com/questions/363/… gescannt ?
Roman Czyborra
0

Java 7, 96 Bytes

Golf:

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;
}
Peech
quelle
0

R, 57 Bytes

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

Ziemlich einfach. gmp::fibnumist eine kürzere integrierte Funktion, unterstützt jedoch nicht die Rückgabe der gesamten Sequenz bis zu n, numbers::fibonacciindem das Argument hinzugefügt wird T.

Zuerst hatte ich eine schwierigere Lösung, bei gmp::fibnumder 2 Bytes länger waren als bei dieser Lösung.

x=scan();for(i in x[1]:x[2])F=F+i^gmp::fibnum((T<-T+1)-1);F
JAD
quelle
Verwenden einer anonymen Funktion anstelle von scan()6 Bytes; siehe meine gepostete Lösung.
Rturnbull
ah ja, dumm von mir.
JAD
0

Gleichstrom , 56 Bytes

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

Endet für die Eingabe [1,30] in 51 Sekunden. Übernimmt die beiden Eingaben in zwei getrennten Zeilen, sobald sie ausgeführt wurden, und negative Zahlen mit einem führenden Unterstrich ( _) anstelle eines Bindestrichs (dh -4als eingegeben _4).

R. Kap
quelle
0

PHP, 77 75 Bytes

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

nimmt Grenzen von Befehlszeilenargumenten. Laufen Sie mit -nr.
Präsentation von PHPs variablen Variablen von (und was ich über sie herausgefunden habe .

Nervenzusammenbruch

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

Die auf PHP portierte FlipTack-Antwort hat 70 Bytes:

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

Axiom, 65 Bytes

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

Testcode und Ergebnisse

(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)
RosLuP
quelle
0

PowerShell , 67 Byte

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

Probieren Sie es online aus!

Ich habe einen etwas besseren Weg gefunden, um die Sequenz zu machen, aber Powershell ist in diesem Fall nicht mit anderen Sprachen vergleichbar :)

Sinus
quelle