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


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

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.

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!


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

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>



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.




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

4

Ruby, 27 byte

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

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.

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

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.



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.



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

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.



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


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


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

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


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


1

Klein , 18 + 3 byte

Ini menggunakan 000topologi

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

Masukkan input dalam formulir x y n.


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


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.