Golf một chuỗi Fibonacci tùy chỉnh


25

Chuỗi Fibonacci là một điều khá nổi tiếng quanh đây. Heck, nó thậm chí có thẻ riêng của mình. Tuy nhiên, đối với tất cả những điều đó, chúng tôi chắc chắn muốn bám vào gốc rễ của chúng tôi 1, 1, ...(hoặc là nó 0, 1, ...? Chúng tôi có thể không bao giờ biết ...). Trong thử thách này, các quy tắc là như nhau, nhưng thay vì nhận được nmục thứ trong chuỗi Fibonacci, bạn sẽ nhận được nmục thứ trong chuỗi Fib-esque bắt đầu bằng x, y, ....

Đầu vào

Ba số nguyên, theo bất cứ thứ tự nào bạn muốn. nlà chỉ mục (0 hoặc 1 được lập chỉ mục) của thuật ngữ trong chuỗi cho đầu ra của bạn. xylà hai mục đầu tiên trong chuỗi Fibonacci chạy chương trình hiện tại của bạn.

Đầu ra

Các nthuật ngữ thứ trong dãy Fibonacci bắt đầu với x, y.

Các trường hợp thử nghiệm

(0 chỉ mục)

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 chỉ mục)

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

Hãy cẩn thận

Giả sử 0 <= x <= y.

Xin lưu ý thứ tự đầu vào của bạn (phải là hằng số).


Chúng ta có thể lấy một danh sách làm đầu vào không?
Mèo kinh doanh

@BusinessCat bạn có ý nghĩa như thế [1, 2, 3]nào? Vâng. Bất cứ điều gì bạn cần chấp nhận 3 số nguyên.
Stephen

@StephenS Làm thế nào về việc dùng một đầu vào như n,[x,y]nơi nlà một con số và xynhững con số trong một danh sách? Điều đó có lẽ hơi quá linh hoạt;)
Tom

1
@ CAD97 Tôi sẽ thêm chúng, tôi đã quên chúng :)
Stephen

Câu trả lời:


15

Thạch , 3 byte

+¡ạ

Lấy x , yn (0-index) làm các đối số dòng lệnh riêng biệt, theo thứ tự đó.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

+¡ạ  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~{_@+}*;

Hãy thử trực tuyến!

Định dạng đầu vào là "xy n". Tôi vẫn là một người không biết điều này, vì vậy tôi chắc chắn 100% có những cách tốt hơn để làm điều này, nhưng làm ơn thay vì nói với tôi "làm điều này" hãy cố gắng chỉ cho tôi gợi ý để tôi có thể tự tìm câu trả lời và nhận được tốt hơn. Cảm ơn!


1
ririricó thể rút ngắn xuống còn 2 byte. fIcó thể rút ngắn xuống còn 1 byte.
Dennis

6
Chào mừng đến với PPCG!
Martin Ender

@Dennis được cải thiện! Cảm ơn bạn! Và cảm ơn vì sự chào đón.
FrodCube


9

JavaScript (ES6), 27 26 byte

Không có gì lạ mắt ở đây, chỉ là một hàm Fib Fibre tiêu chuẩn với các giá trị ban đầu là 0 & 1 bị loại bỏ.

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

Thử nó

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>


6

Python 2, 40 byte

0 chỉ mục
Hãy thử trực tuyến

n,a,b=input()
exec'a,b=b,a+b;'*n
print a

Haha không chịu giới hạn đệ quy / ngăn xếp không giống như một số câu trả lời khác. Bí quyết đẹp.
ShreevatsaR

@ShreevatsaR Cảm ơn! Nhưng lambda đệ quy vẫn đánh bại tôi: D
Dead Possum

5

Haskell , 30 byte

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

Hãy thử trực tuyến! Chỉ số 0. Sử dụng như (x#y)n, ví dụ (0#1)5cho phần tử thứ năm của chuỗi ban đầu.

Cách ngắn nhất có khả năng nhất để có được chuỗi Fibonacci trong Haskell là f=0:scanl(+)1f, định nghĩa một danh sách vô hạn f=[0,1,1,2,3,5,8,...]có chứa chuỗi. Thay thế 01với các đối số xymang lại trình tự tùy chỉnh. (f!!)sau đó là một hàm trả về phần tử thứ n của f.


5

Toán học, 36 byte

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

đầu vào

[n, x, y]


1
Bạn có thể sử dụng ##2thay vì #2,#3.
alephalpha

rất đẹp! đã sửa!
J42161217


4

Brain-Flak , 38 byte

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

Hãy thử trực tuyến!

{({}[()]<                      >)}     # 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

Thạch , 6 byte

;SḊµ¡I

Hãy thử trực tuyến!

Giải trình

   µ¡  - 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 chỉ mục

Thông dịch viên

Giải trình

Đầu vào được lấy là 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,_).

Hãy thử trực tuyến!

Bắt đầu chơi golf câu trả lời của Leaky Nun và đến một cái gì đó hoàn toàn khác.

Điều này có một quy tắc (Nᵗʰ, (N+1)ᵗʰ)về mặt ((N-1)ᵗʰ, Nᵗʰ)và sử dụng quản lý cơ sở dữ liệu để khẳng định các phần tử 0ᵗʰ và 1ˢᵗ khi chạy.

f(N,X,Y)có nghĩa là Nᵗʰyếu tố là X(N+1)ᵗʰyếu tố là Y.



2

Braingolf , 15 byte

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

_; không còn cần thiết trên phiên bản mới nhất của Braingolf, tuy nhiên, tính đến ~ 5 phút trước, do đó sẽ không cạnh tranh.



2

MATL , 7 byte

:"wy+]x

Đầu ra là 0 dựa trên.

Hãy thử nó tại MATL Online!

Giải trình

Đặt các đầu vào được ký hiệu n(chỉ mục) a,, b(các thuật ngữ ban đầu).

:"     % 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)

Một hàm đệ quy đơn giản. Thật thú vị, điều này ngắn hơn bất cứ điều gì tôi có thể đưa ra cho chuỗi Fibonacci thông thường (không có tích hợp sẵn), vì điều này không phải gán 1cho cả xy= P

Tính n+1số lượng của chuỗi, bao gồm các giá trị ban đầu. Mỗi đệ quy được tính toán với n-1và dừng khi n==0. Số thấp nhất trong hai số sau đó được trả về, trả về ngiá trị -th.




2

Lisp thông thường, 49 byte, 0 chỉ mục

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

Tôi là một Lisp noob nên mọi lời khuyên đều được đánh giá cao;)

Giải trình:

(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

Cảm ơn @JoKing cho -10!

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

TIO sẽ không hoạt động đặc biệt tốt cho việc này (hoặc cho bất kỳ giải pháp BF nào cho vấn đề liên quan đến số). Tôi thực sự đề nghị @ Timwi's EsotericIDE (hoặc tự thực hiện BF).

Mất x, sau đó y, sau đó n. Chỉ số 0. Giả sử một băng không giới hạn hoặc gói.

Giải trình

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

Tại sao bạn lại bận tâm di chuyển x và y khi bạn chỉ có thể di chuyển n? Dùng thử trực tuyến
Jo King

@JoKing Đã xem xét điều đó (nhưng lâu hơn là của riêng tôi), nhưng nó không hoạt động hoàn toàn, trừ khi OP cho phép " -1tìm kiếm".
Khuldraeseth na'Barya

Ồ, chỉ cần thêm một >kết thúc hoặc hoán đổi thứ tự x và y
Jo King

@JoKing Lòng bàn tay tôi đập vào mặt tôi khá khó khăn. Cảm ơn!
Khuldraeseth na'Barya

Tại sao bạn lại bận tâm kiểm duyệt "bộ não" mà không phải là từ thứ hai trong tên của ngôn ngữ lập trình?
MilkyWay90


1

05AB1E , 9 byte

`©GDŠ+}®@

Hãy thử trực tuyến!

Giải trình

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

Điều này sử dụng 000cấu trúc liên kết

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

Vượt qua đầu vào trong mẫu x y n.


1

Tiên đề, 88 57 byte

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

điều này sẽ vượt qua bài kiểm tra đề xuất (0 chỉ mục)

(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


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.