Golf eine benutzerdefinierte Fibonacci-Sequenz

25

Die Fibonacci-Sequenz ist hier ziemlich bekannt. Verdammt, es hat sogar einen eigenen Tag. Trotzdem bleiben wir gerne bei unseren Wurzeln 1, 1, ...(oder ist es das 0, 1, ...? Wir werden es vielleicht nie erfahren ...). In dieser Herausforderung sind die Regeln gleich, aber anstatt das nth-Element in der Fibonacci-Sequenz zu erhalten, erhalten Sie das nth-Element in der Fibonacci-esque-Sequenz, beginnend mit x, y, ....

Eingang

Drei ganze Zahlen in beliebiger Reihenfolge. nist der Index (0 oder 1 indiziert) des Terms in der Sequenz für Ihre Ausgabe. xund ysind die ersten beiden Elemente in der Fibonacci-Sequenz Ihres aktuellen Programmlaufs.

Ausgabe

Das nte Glied in der Fibonacci - Folge , beginnend mit x, y.

Testfälle

(0-indiziert)

n   x     y     out
5   0     0     0
6   0     1     8
6   1     1     13
2   5     5     10
10  2     2     178
3   3     10    23
13  2308  4261  1325165
0   0     1     0
1   0     1     1

(1-indiziert)

n   x     y     out
6   0     0     0
7   0     1     8
7   1     1     13
3   5     5     10
11  2     2     178
4   3     10    23
14  2308  4261  1325165
1   0     1     0
2   0     1     1

Vorbehalte

Annehmen 0 <= x <= y .

Bitte beachten Sie Ihre Eingabereihenfolge (muss konstant sein).

Stephen
quelle
Können wir eine Liste als Eingabe nehmen?
Business Cat
@BusinessCat meinst du gerne [1, 2, 3]? Ja. Was auch immer Sie brauchen, um 3 ganze Zahlen zu akzeptieren.
Stephen
@StephenS Wie wäre es mit einer Eingabe als n,[x,y]Wo nist eine Zahl und xund ysind Zahlen in einer Liste? Das ist aber wahrscheinlich ein bisschen zu flexibel;)
Tom
1
@ CAD97 Ich werde sie hinzufügen, ich hatte sie vergessen :)
Stephen
1
Verwandte
xnor

Antworten:

15

Gelee , 3 Bytes

+¡ạ

Nimmt x , y und n (0-indiziert) als separate Befehlszeilenargumente in dieser Reihenfolge.

Probieren Sie es online!

Wie es funktioniert

+¡ạ  Main link. Left argument: x. Right argument: y. Third argument: n

  ạ  Yield abs(x - y) = y - x, the (-1)-th value of the Lucas sequence.
+¡   Add the quicklink's left and right argument (initially x and y-x), replacing
     the right argument with the left one and the left argument with the result.
     Do this n times and return the final value of the left argument.
Dennis
quelle
11

CJam , 14 9 Bytes

l~{_@+}*;

Probieren Sie es online!

Das Eingabeformat ist "xy n". Ich bin immer noch ein Neuling, daher bin ich mir zu 100% sicher, dass es bessere Möglichkeiten gibt, dies zu tun. Aber bitte, anstatt mir zu sagen, dass ich dies tue, versuche nur, mir Hinweise zu geben, damit ich die Antwort selbst finden und bekommen kann besser. Vielen Dank!

FrodCube
quelle
1
riririkann auf 2 Bytes gekürzt werden. fIkann auf 1 Byte gekürzt werden.
Dennis
6
Willkommen bei PPCG!
Martin Ender
@ Tennis verbessert! Vielen Dank! Und danke für die Begrüßung.
FrodCube
9

JavaScript (ES6), 27 bis 26 Byte

Nichts Besonderes hier, nur eine Standard-JS-Fibonacci-Funktion, bei der die Anfangswerte von 0 und 1 entfernt wurden.

n=>g=(x,y)=>n--?g(y,x+y):x

Versuch es

f=
n=>g=(x,y)=>n--?g(y,x+y):x
o.value=f(i.value=13)(j.value=2308,k.value=4261)
oninput=_=>o.value=f(+i.value)(+j.value,+k.value)
*{font-family:sans-serif;}
input{margin:0 5px 0 0;width:50px;}
#o{width:75px;}
<label for=i>n: </label><input id=i type=number><label for=j>x: </label><input id=j type=number><label for=k>y: </label><input id=k type=number><label for=o>= </label><input id=o>

Zottelig
quelle
6

Python 2, 40 Bytes

0-indiziert
Probieren Sie es online

n,a,b=input()
exec'a,b=b,a+b;'*n
print a
Totes Opossum
quelle
Haha, im Gegensatz zu einigen anderen Antworten unterliegt es keiner Rekursions- / Stapelbeschränkung. Guter Trick.
ShreevatsaR
@ShreevatsaR Danke! Aber rekursives Lambda schlägt mich trotzdem: D
Dead Possum
5

Haskell , 30 Bytes

x#y=(f!!)where f=x:scanl(+)y f

Probieren Sie es online! 0-indiziert. Verwenden Sie als (x#y)nzB (0#1)5für das fünfte Element der Originalsequenz.

Der wahrscheinlich kürzeste Weg, um die Fibonacci-Sequenz in Haskell zu erhalten, ist f=0:scanl(+)1f, eine unendliche Liste zu definieren, f=[0,1,1,2,3,5,8,...]die die Sequenz enthält. Ersetzen 0und 1mit Argumenten xund yergibt die benutzerdefinierte Sequenz. (f!!)ist dann eine Funktion, die das n-te Element von zurückgibt f.

Laikoni
quelle
5

Mathematica, 36 Bytes

LinearRecurrence[{1,1},{##2},{#+1}]&

Eingang

[n, x, y]

J42161217
quelle
1
Sie können ##2anstelle von verwenden #2,#3.
alephalpha
Sehr schön! Fest!
J42161217
4

Brain-Flak , 38 Bytes

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

Probieren Sie es online!

{({}[()]<                      >)}     # For n .. 0
         (({}<>)<>            )        # Copy TOS to the other stack and add it to...
                  {}                   # The second value
                    <(<>{}<>)>         # Copy what was TOS back
                                  {}{} # Pop the counter and the n+1th result
Riley
quelle
4

Ruby, 27 Bytes

->a,b,n{n.times{b=a+a=b};a}
GB
quelle
3

Gelee , 6 Bytes

;SḊµ¡I

Probieren Sie es online!

Erläuterung

   µ¡  - repeat n times (computes the n+1th and n+2th element):
 S     -  take the sum of the elements of the previous iteration (starting at (x,y))
;      -  append to the end of the previous iteration
  Ḋ    -  remove the first element
     I - Take the difference of the n+1th and n+2th to get the n-th.
fireflame241
quelle
3

TAESGL , 4 Bytes

ēB)Ė

1-indiziert

Dolmetscher

Erläuterung

Eingabe übernommen als n,[x,y]

 ēB)Ė
AēB)     get implicit input "A" Fibonacci numbers where "B" is [x,y]
    Ė    pop the last item in the array
Tom
quelle
3

Prolog (SWI) , 77 Bytes

f(N,Y,Z):-M is N-1,f(M,X,Y),Z is X+Y.
l(N,A,B,X):-asserta(f(0,A,B)),f(N,X,_).

Probieren Sie es online!

Begann mit dem Golfen von Leaky Nuns Antwort und kam zu etwas völlig anderem.

Dieser hat eine Regel (Nᵗʰ, (N+1)ᵗʰ)in Bezug auf ((N-1)ᵗʰ, Nᵗʰ)und verwendet die Datenbankverwaltung , um 0ᵗʰ- und 1ˢᵗ-Elemente zur Laufzeit zu aktivieren.

f(N,X,Y)bedeutet NᵗʰElement ist Xund (N+1)ᵗʰElement ist Y.

eush77
quelle
2

Braingolf , 15 Bytes

VR<2-M[R!+v]R_;

_; wird für die neueste Version von Braingolf nicht mehr benötigt, allerdings ist das ab ~ 5 Minuten her, wäre also nicht konkurrierend.

Skidsdev
quelle
2

Python 2 , 112 Bytes

1-indiziert.

import itertools
def f(x,y):
 while 1:yield x;x,y=y,x+y
def g(x,y,n):return next(itertools.islice(f(x,y),n-1,n))

Probieren Sie es online!

total menschlich
quelle
Äh, zu spät und zu groß.
Totalhuman
2

MATL , 7 Bytes

:"wy+]x

Die Ausgabe erfolgt auf 0-Basis.

Probieren Sie es bei MATL Online!

Erläuterung

Lassen Sie die Eingänge bezeichnet werden n(Index), a, b(Grundmietzeit).

:"     % Implicitly input n. Do this n times
       %   At this point in each iteration, the stack contains the two most
       %   recently computed terms of the sequence, say s, t. In the first
       %   iteration the stack is empty, but a, b will be implicitly input
       %   by the next statement
  w    %   Swap. The stack contains t, s
  y    %   Duplicate from below. The stack contains t, s, t
  +    %   Add. The stack contains t, s+t. These are now the new two most
       %   recently comnputed terms
]      % End
x      % Delete (we have computed one term too many). Implicitly display
Luis Mendo
quelle
2

R, 39 Bytes

f=function(x,y,n)'if'(n,f(y,x+y,n-1),x)

Eine einfache rekursive Funktion. Komischerweise ist dies kürzer als alles, was ich mir für die reguläre Fibonacci-Sequenz (ohne eingebaute Funktionen) vorstellen kann, da dies nicht 1beiden xund y= P zugewiesen werden muss

Berechnet n+1die Folgenummern einschließlich der Anfangswerte. Jede Rekursion wird mit berechnet n-1und gestoppt, wenn n==0. Die niedrigste der beiden Zahlen wird dann zurückgegeben und gibt den n-ten Wert zurück.

JAD
quelle
2

PHP> = 7.1, 55 Bytes

for([,$n,$x,$y]=$argv;$n--;$x=$y,$y=$t)$t=$x+$y;echo$x;

Online Version

PHP> = 7.1, 73 Bytes

for([,$n,$x,$y]=$argv,$r=[$x,$y];$i<$n;)$r[]=$r[+$i]+$r[++$i];echo$r[$n];

Online Version

Jörg Hülsermann
quelle
1
Unter Ausnutzung fremder Auswerteauftrag PHP: $y=+$x+$x=$y. Sie können auch nur $n--anstelle von verwenden $i++<$n.
user63956
2

Common Lisp, 49 Bytes, 0-indiziert

(defun fib(n x y)(if(= 0 n)x(fib(1- n)y(+ x y))))

Ich bin ein Lisp Noob, also wäre jeder Tipp dankbar;)

Erläuterung:

(defun fib(n x y)                                  | Define a function taking 3 arguments
                 (if(= 0 n)x                       | If n = 0, return x
                            (fib(1- n)y(+ x y))))  | Otherwise, call fib with n-1, y, and x+y
Bolce Bussiere
quelle
2

Prolog (SWI) , 85 Bytes

l(0,X,Y,X).
l(1,X,Y,Y).
l(N,X,Y,C):-M is N-1,P is N-2,l(M,X,Y,A),l(P,X,Y,B),C is A+B.

Probieren Sie es online!

0-indiziert.

Undichte Nonne
quelle
Könnten Sie diese Antwort bearbeiten? Ich habe es an dem Tag, an dem du es gepostet hast, versehentlich runtergestimmt.
Esolanging Fruit
@ EsolangingFruit getan
Undichte Nonne
2

br ** nfuck, 39 29 Bytes

Danke an @JoKing für -10!

,<,<,[>[>+>+<<-]<[>+<-]>-]>>.

TIO eignet sich nicht besonders gut dafür (oder für eine BF-Lösung für ein Problem mit Zahlen). Ich empfehle dringend @ Timwi's EsotericIDE (oder die Implementierung von BF selbst).

Nimmt xdann ydannn . 0-indiziert. Nimmt ein ungebundenes oder umwickeltes Band an.

Erläuterung

,<,<,            Take inputs. Tape: [n, y, x]
[                While n:
  > [->+>+<<]      Add y to x, copying it to the next cell along as well. Tape: [n, 0, x+y, y]
  < [>+<-]         Move n over. Tape: [0, n, x+y, y]
  >-               Decrement n.
] >>.            End loop. Print cell 2 to the right (x for n == 0).
Khuldraeseth na'Barya
quelle
Warum bewegst du x und y, wenn du nur n bewegen kannst? Online
Jo King
@JoKing Berücksichtigt das (aber länger alleine), aber es funktioniert nicht ganz, es sei denn, OP erlaubt " -1-indexing".
Khuldraeseth na'Barya
Oh, fügen Sie einfach ein >am Ende oder tauschen Sie x und y Reihenfolge
Jo King
@JoKing Meine Handfläche traf mich gerade ziemlich hart. Vielen Dank!
Khuldraeseth na'Barya
Warum haben Sie sich die Mühe gemacht, "Gehirn" zu zensieren, aber nicht das zweite Wort im Namen der Programmiersprache?
MilkyWay90
2

C (gcc) , 29 Bytes

f(n,x,y){n=n?f(n-1,y,x+y):x;}

Probieren Sie es online!

Diese Implementierung basiert auf 0.

PikalaxALT
quelle
Schön und willkommen! Hier ist ein hübscheres TIO-Setup zum Testen, falls Sie es verwenden möchten.
Khuldraeseth na'Barya
1

05AB1E , 9 Bytes

`©GDŠ+}®@

Probieren Sie es online!

Erläuterung

`           # split inputs as separate to stack
 ©          # store n in register
  G         # n-1 times do
   D        # duplicate top of stack
    Š       # move down 2 places on stack
     +      # add top 2 values of stack
      }     # end loop
       ®@   # get the value nth value from the bottom of stack
Emigna
quelle
1

Klein , 18 + 3 Bytes

Dies verwendet die 000Topologie

:?\(:(+)$)1-+
((/@

Eingabe im Formular übergeben x y n.

Weizen-Assistent
quelle
1

Axiom, 88 57 Bytes

f(k,x,y)==(repeat(k<=0=>break;c:=y;y:=x+y;x:=c;k:=k-1);x)

dies würde den vorgeschlagenen Test bestehen (0 indiziert)

(14) -> f(5,0,0)
   (14)  0
                                                 Type: NonNegativeInteger
(15) -> f(6,0,1)
   (15)  8
                                                    Type: PositiveInteger
(16) -> f(2,5,5)
   (16)  10
                                                    Type: PositiveInteger
(17) -> f(10,2,2)
   (17)  178
                                                    Type: PositiveInteger
(18) -> f(3,3,10)
   (18)  23
                                                    Type: PositiveInteger
(19) -> f(13,2308,4261)
   (19)  1325165
                                                    Type: PositiveInteger
RosLuP
quelle
1

TI-Basic, 32 Bytes

Prompt N,X,Y
While N
X+Y➡Z
Y➡X
Z➡Y
DS<(N,0
End
X
Pizzapants184
quelle