Golf Urutan Fibonacci Kustom

25

The Fibonacci urutan adalah hal yang cukup dikenal di sini. Heck, itu bahkan memiliki tag sendiri. Namun, untuk semua itu, kami yakin ingin tetap berpegang pada akar 1, 1, ...(atau apakah itu 0, 1, ...? Kita mungkin tidak pernah tahu ...). Dalam tantangan ini, aturannya sama, tetapi alih-alih mendapatkan nitem ke-5 dalam urutan Fibonacci, Anda akan mendapatkan nitem ke-5 dalam urutan Fibonacci-esque yang dimulai dengan x, y, ....

Memasukkan

Tiga bilangan bulat, dalam urutan apa pun yang Anda inginkan. nadalah indeks (0 atau 1 diindeks) dari istilah dalam urutan untuk output Anda. xdan ymerupakan dua item pertama dalam urutan Fibonacci yang dijalankan oleh program Anda saat ini.

Keluaran

The nIstilah th dalam urutan Fibonacci dimulai dengan x, y.

Uji Kasus

(Diindeks 0)

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-diindeks)

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

Peringatan

Asumsikan 0 <= x <= y.

Harap perhatikan pesanan input Anda (harus konstan).

Stephen
sumber
Bisakah kita mengambil daftar sebagai masukan?
Business Cat
@BusinessCat maksudmu seperti [1, 2, 3]? Iya nih. Apa pun yang Anda butuhkan untuk menerima 3 bilangan bulat.
Stephen
@StephenS Bagaimana kalau mengambil input sebagai di n,[x,y]mana nangka dan xdan yapakah angka dalam daftar? Itu mungkin agak terlalu fleksibel;)
Tom
1
@ CAD97 Saya akan menambahkannya, saya sudah lupa tentang mereka :)
Stephen
1
Terkait
xnor

Jawaban:

15

Jelly , 3 byte

+¡ạ

Mengambil x , y , dan n (0-diindeks) sebagai argumen baris perintah yang terpisah, dalam urutan itu.

Cobalah online!

Bagaimana itu bekerja

+¡ạ  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
sumber
11

CJam , 14 9 byte

l~{_@+}*;

Cobalah online!

Format input adalah "xy n". Saya masih noob dalam hal ini, jadi saya 100% yakin ada cara yang lebih baik untuk melakukan ini, tapi tolong daripada mengatakan kepada saya "lakukan ini" cobalah untuk hanya memberi saya petunjuk sehingga saya dapat menemukan jawabannya sendiri dan mendapatkan lebih baik. Terima kasih!

FrodCube
sumber
1
ririridapat disingkat menjadi 2 byte. fIdapat disingkat menjadi 1 byte.
Dennis
6
Selamat datang di PPCG!
Martin Ender
@Dennis membaik! Terima kasih! Dan terima kasih atas sambutannya.
FrodCube
9

Python 2 , 37 byte

f=lambda x,y,n:n and f(y,x+y,n-1)or x

Cobalah online!

Diindeks 0, Anda mungkin perlu menyesuaikan batas rekursi n≥999

ovs
sumber
9

JavaScript (ES6), 27 26 byte

Tidak ada yang mewah di sini, hanya fungsi JS Fibonacci standar dengan nilai awal 0 & 1 dihapus.

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

Cobalah

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>

Shaggy
sumber
6

Python 2, 40 byte

Diindeks 0
Cobalah secara online

n,a,b=input()
exec'a,b=b,a+b;'*n
print a
Possum Mati
sumber
Haha tidak mengalami batas rekursi / stack tidak seperti beberapa jawaban lainnya. Trik yang bagus.
ShreevatsaR
@ShreevatsaR Terima kasih! Tapi lambda rekursif mengalahkan saya: D
Dead Possum
5

Haskell , 30 byte

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

Cobalah online! Diindeks 0. Gunakan sebagai (x#y)n, misalnya (0#1)5untuk elemen kelima dari urutan asli.

Cara terpendek yang paling mungkin untuk mendapatkan urutan Fibonacci di Haskell adalah f=0:scanl(+)1f, yang mendefinisikan daftar tak terbatas yang f=[0,1,1,2,3,5,8,...]berisi urutan. Mengganti 0dan 1dengan argumen xdan ymenghasilkan urutan khusus. (f!!)kemudian fungsi mengembalikan elemen ke - n dari f.

Laikoni
sumber
5

Mathematica, 36 byte

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

memasukkan

[n, x, y]

J42161217
sumber
1
Anda bisa menggunakan ##2bukan #2,#3.
alephalpha
sangat bagus! tetap!
J42161217
4

Brain-Flak , 38 byte

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

Cobalah 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
sumber
4

Ruby, 27 byte

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

Jelly , 6 byte

;SḊµ¡I

Cobalah online!

Penjelasan

   µ¡  - 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
sumber
3

TAESGL , 4 byte

ēB)Ė

1-diindeks

Penerjemah

Penjelasan

Input diambil sebagai 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
sumber
3

Prolog (SWI) , 77 byte

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,_).

Cobalah online!

Mulai bermain golf jawaban Leaky Nun dan tiba di sesuatu yang sama sekali berbeda.

Yang ini memiliki aturan (Nᵗʰ, (N+1)ᵗʰ)dalam hal ((N-1)ᵗʰ, Nᵗʰ)dan menggunakan manajemen database untuk menyatakan elemen 0ᵗʰ dan 1ˢᵗ pada saat runtime.

f(N,X,Y)berarti Nᵗʰelemen Xdan (N+1)ᵗʰelemen Y.

eush77
sumber
3

Oktaf , 24 byte

@(n,x)(x*[0,1;1,1]^n)(1)

Format input: n,[x,y].

Cobalah online!

alephalpha
sumber
2

Braingolf , 15 byte

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

_; tidak lagi diperlukan pada versi terbaru Braingolf, namun itu pada ~ 5 menit yang lalu, jadi tidak akan bersaing.

Skidsdev
sumber
2

Python 2 , 112 byte

1-diindeks.

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))

Cobalah online!

benar-benar manusiawi
sumber
Erp, sudah terlambat dan terlalu besar.
manusiawi
2

MATL , 7 byte

:"wy+]x

Output berbasis 0.

Cobalah di MATL Online!

Penjelasan

Biarkan input dinotasikan n(indeks) a,, b(istilah awal).

:"     % 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
sumber
2

R, 39 byte

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

Fungsi rekursif sederhana. Lucunya ini lebih pendek dari apa pun yang dapat saya buat untuk urutan Fibonacci reguler (tanpa built-in), karena ini tidak harus menetapkan 1keduanya xdan y= P

Menghitung n+1angka urutan, termasuk nilai awal. Setiap rekursi dihitung dengan n-1dan dihentikan kapan n==0. Yang terendah dari kedua angka tersebut kemudian dikembalikan, memberikan kembali nilai n-th.

JAD
sumber
2

dc , 36 byte

?sdsbsa[lddlb+sdsbla1-dsa1<c]dscxldp

Cobalah online!

0-indeks Masukan harus dalam format n x y.

R. Kap
sumber
2

PHP> = 7.1, 55 Bytes

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

Versi Online

PHP> = 7.1, 73 Bytes

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

Versi Online

Jörg Hülsermann
sumber
1
Mengambil keuntungan dari rangka evaluasi PHP aneh ini: $y=+$x+$x=$y. Juga, Anda dapat menggunakan hanya $n--sebagai gantinya $i++<$n.
user63956
2

Common Lisp, 49 Bytes, 0-diindeks

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

Saya seorang Lisp noob sehingga tips apa pun akan dihargai;)

Penjelasan:

(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
sumber
2

Prolog (SWI) , 85 byte

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.

Cobalah online!

Diindeks 0.

Biarawati Bocor
sumber
Bisakah Anda mengedit jawaban ini? Sepertinya saya tidak sengaja menurunkannya pada hari Anda mempostingnya.
Buah Esolanging
@EsolangingFruit selesai
Leaky Nun
2

br ** nfuck, 39 29 byte

Terima kasih kepada @JoKing untuk -10!

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

TIO tidak akan bekerja dengan baik untuk ini (atau untuk solusi BF untuk masalah yang melibatkan angka). Saya sangat menyarankan EsotericIDE @ Timwi (atau menerapkan BF sendiri).

Dibutuhkan x, lalu y, kemudian n. Diindeks 0. Mengasumsikan pita tanpa batas atau pembungkus.

Penjelasan

,<,<,            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
sumber
Mengapa Anda repot-repot memindahkan x dan y ketika Anda hanya bisa memindahkan n? Cobalah secara Online
Jo King
@ JoKing Dianggap itu (tetapi lebih lama pada saya sendiri), tetapi tidak cukup bekerja, kecuali OP mengizinkan " -1-indexing".
Khuldraeseth na'Barya
Oh, tambahkan saja >ke akhir atau tukar pesanan x dan y
Jo King
@JoKing Telapak tanganku memukul wajahku cukup keras sekarang. Terima kasih!
Khuldraeseth na'Barya
Mengapa Anda repot-repot menyensor "otak" tetapi bukan kata kedua dalam nama bahasa pemrograman?
MilkyWay90
2

C (gcc) , 29 byte

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

Cobalah online!

Implementasi ini berbasis 0.

PikalaxALT
sumber
Bagus, dan selamat datang! Berikut ini adalah pengaturan TIO yang lebih cantik untuk pengujian, jika Anda memilih untuk menggunakannya.
Khuldraeseth na'Barya
1

05AB1E , 9 byte

`©GDŠ+}®@

Cobalah online!

Penjelasan

`           # 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
sumber
1

Klein , 18 + 3 byte

Ini menggunakan 000topologi

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

Masukkan input dalam formulir x y n.

Wisaya Gandum
sumber
1

Aksioma, 88 57 byte

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

ini akan lulus tes yang diusulkan (0 diindeks)

(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
sumber
1

Retina , 37 byte

\d+
$*1
+`(1*) (1*) 1
$2 $1$2 
 .*

1

Cobalah online!

Berbasis 0, x y ndipisahkan oleh ruang. Menghitung dalam unary.

eush77
sumber
1

TI-Basic, 32 byte

Prompt N,X,Y
While N
X+Y➡Z
Y➡X
Z➡Y
DS<(N,0
End
X
pizzapants184
sumber