เล่นกอล์ฟลำดับ Fibonacci ที่กำหนดเอง


25

ลำดับฟีโบนักชีเป็นสิ่งที่ค่อนข้างรู้จักกันดีในรอบที่นี่ Heck มันมีแท็กของตัวเอง อย่างไรก็ตามสำหรับทั้งหมดนั้นเราแน่ใจว่าต้องการยึดติดกับรากของเรา1, 1, ...(หรือมันคือ0, 1, ...อะไรเราอาจไม่เคยรู้ ... ) ในความท้าทายนี้กฎจะเหมือนกัน แต่แทนที่จะได้รับnรายการ TH ในลำดับฟีโบนักชี, คุณจะได้รับnรายการ TH x, y, ...ในลำดับฟีโบนักชีฟีเจอร์ที่เริ่มต้นด้วย

อินพุต

จำนวนเต็มสามจำนวนตามลำดับที่คุณต้องการ nคือดัชนี (0 หรือ 1 ดัชนี) ของคำในลำดับสำหรับผลลัพธ์ของคุณ xและyเป็นสองรายการแรกในลำดับ Fibonacci ของโปรแกรมปัจจุบันของคุณ

เอาท์พุต

nระยะ TH ในลำดับฟีโบนักชีเริ่มต้นด้วย,xy

กรณีทดสอบ

(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 จัดทำดัชนี)

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

คำเตือน

สมมติ 0 <= x <= yสมมติ

โปรดทราบคำสั่งซื้อของคุณ (จะต้องคงที่)


เราสามารถนำรายการเป็นอินพุตได้หรือไม่
ธุรกิจ Cat

@BusinessCat คุณหมายความว่า[1, 2, 3]อย่างไร ใช่. สิ่งที่คุณต้องยอมรับ 3 จำนวนเต็ม
Stephen

@StephenS วิธีการเกี่ยวกับการป้อนข้อมูลn,[x,y]ที่nเป็นตัวเลขและxและyเป็นตัวเลขในรายการ? นั่นอาจเป็นความยืดหยุ่นเกินไปเล็กน้อย;)
Tom

1
@ CAD97 ฉันจะเพิ่มพวกเขาฉันลืมพวกเขา :)
สตีเฟ่น

คำตอบ:


15

เยลลี่ 3 ไบต์

+¡ạ

รับx , y , และn (0-indexed) เป็นอาร์กิวเมนต์บรรทัดคำสั่งแยกต่างหากตามลำดับ

ลองออนไลน์!

มันทำงานอย่างไร

+¡ạ  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 ไบต์

l~{_@+}*;

ลองออนไลน์!

รูปแบบอินพุตคือ "xy n" ฉันยังคงเป็น noob อยู่ดังนั้นฉันจึงมั่นใจ 100% ว่ามีวิธีที่ดีกว่าในการทำเช่นนี้ แต่โปรดบอกฉันว่า "ทำสิ่งนี้" ลองให้คำแนะนำแก่ฉันเพื่อที่ฉันจะได้พบคำตอบและรับ ดีกว่า ขอบคุณ!


1
riririสามารถย่อให้เหลือ 2 ไบต์ fIสามารถย่อให้เหลือ 1 ไบต์
เดนนิส

6
ยินดีต้อนรับสู่ PPCG!
Martin Ender

@Dennis ได้รับการปรับปรุง! ขอขอบคุณ! และขอบคุณสำหรับการต้อนรับ.
FrodCube


9

JavaScript (ES6), 27 26 ไบต์

ไม่มีอะไรแฟนซีที่นี่เพียงแค่ฟังก์ชั่น JS Fibonacci มาตรฐานที่มีค่าเริ่มต้นเป็น 0 และ 1 ลบออก

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

ลองมัน

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 ไบต์

ดัชนี 0
ลองออนไลน์

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

ฮ่าฮ่าไม่ต้องอยู่ภายใต้ข้อ จำกัด การเรียกซ้ำ / กองซ้อนซึ่งต่างจากคำตอบอื่น เคล็ดลับดี
ShreevatsaR

@ShreevatsaR ขอบคุณ! แต่แลมบ์ดาที่ซ้ำซากก็เต้นฉันต่อไป: D
Dead Possum

5

Haskellขนาด 30 ไบต์

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

ลองออนไลน์! 0 การจัดทำดัชนี ใช้เป็น(x#y)nเช่น(0#1)5สำหรับองค์ประกอบที่ห้าของลำดับเดิม

วิธีที่สั้นที่สุดที่น่าจะได้ลำดับ Fibonacci ใน Haskell คือf=0:scanl(+)1fกำหนดรายการ infinite f=[0,1,1,2,3,5,8,...]ที่มีลำดับ การแทนที่0และ1ด้วยอาร์กิวเมนต์xและyให้ผลตามลำดับที่กำหนดเอง (f!!)หลังจากนั้นก็เป็นฟังก์ชั่นกลับองค์ประกอบ n fของ







3

TAESGLขนาด 4 ไบต์

ēB)Ė

1 การจัดทำดัชนี

ล่าม

คำอธิบาย

นำเข้าเป็น 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 ไบต์

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

ลองออนไลน์!

เริ่มเล่นกอล์ฟคำตอบของ Leaky Nunและมาถึงสิ่งที่แตกต่างอย่างสิ้นเชิง

อันนี้มีกฎสำหรับ(Nᵗʰ, (N+1)ᵗʰ)ในแง่ของ((N-1)ᵗʰ, Nᵗʰ)และใช้การจัดการฐานข้อมูลเพื่อยืนยันองค์ประกอบ 0 และ1ˢᵗที่รันไทม์

f(N,X,Y)หมายถึงNᵗʰองค์ประกอบXและองค์ประกอบ(N+1)ᵗʰY



2

Braingolfขนาด 15 ไบต์

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

_; ไม่จำเป็นสำหรับ Braingolf รุ่นล่าสุดอีกต่อไป แต่นั่นเป็นเวลาประมาณ 5 นาทีที่ผ่านมาดังนั้นจึงไม่ใช่การแข่งขัน



2

MATL , 7 ไบต์

:"wy+]x

ผลลัพธ์เป็นแบบ 0

ลองที่MATL Online!

คำอธิบาย

ปล่อยให้อินพุตถูกแทนn(ดัชนี) a,, b(คำเริ่มต้น)

:"     % 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 ไบต์

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

ฟังก์ชั่นวนซ้ำง่าย ๆ ตลกมากพอที่จะสั้นกว่าทุกอย่างที่ฉันสามารถหาได้สำหรับลำดับฟีโบนักชีปกติ (ไม่มีบิวด์อิน) เพราะมันไม่จำเป็นต้องกำหนด1ให้ทั้งสองxและy = P

คำนวณn+1ตัวเลขของลำดับรวมถึงค่าเริ่มต้น แต่ละเรียกซ้ำคำนวณด้วยและหยุดเมื่อn-1 n==0ตัวเลขที่ต่ำที่สุดของทั้งสองจะถูกส่งกลับโดยให้nค่า -th กลับมา



2

PHP> = 7.1, 55 ไบต์

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

เวอร์ชั่นออนไลน์

PHP> = 7.1, 73 ไบต์

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

เวอร์ชั่นออนไลน์


1
การใช้ประโยชน์จากที่แปลกประหลาดของ PHP $y=+$x+$x=$yเพื่อการประเมินผล: นอกจากนี้คุณยังสามารถใช้เพียงแทน$n-- $i++<$n
user63956

2

Lisp สามัญ, 49 ไบต์, ดัชนี 0

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

ฉันเป็น LISP noob ดังนั้นคำแนะนำใด ๆ ที่จะได้รับการชื่นชม;)

คำอธิบาย:

(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

Prolog (SWI) , 85 ไบต์

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.

ลองออนไลน์!

0 การจัดทำดัชนี


คุณสามารถแก้ไขคำตอบนี้ได้ไหม ดูเหมือนว่าฉันจะลงคะแนนในวันที่คุณโพสต์โดยไม่ตั้งใจ
แยกผลไม้

@EsolangingFruit เสร็จแล้ว
Leaky Nun

2

br ** nfuck, 39 29 ไบต์

ขอบคุณ @JoKing สำหรับ -10!

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

TIO จะไม่ทำงานได้ดีเป็นพิเศษสำหรับเรื่องนี้ (หรือสำหรับวิธีแก้ปัญหา BF ปัญหาที่เกี่ยวข้องกับตัวเลข) ฉันขอแนะนำEsotericIDEของ @ Timwi (หรือบังคับใช้ BF ของคุณเอง)

เอาxไปyแล้วnแล้ว0 การจัดทำดัชนี สมมติว่ามีเทปมากมายหรือเทปห่อหุ้ม

คำอธิบาย

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

ทำไมคุณถึงต้องย้าย x และ y เมื่อคุณสามารถเลื่อน n? ทดลองใช้ออนไลน์
Jo King

@ โจกิ้งพิจารณาแล้ว (แต่นานกว่านั้นด้วยตัวเอง) แต่มันใช้งานไม่ได้ยกเว้น OP จะอนุญาตให้ " -1-indexing"
Khuldraeseth na'Barya

โอ้เพียงแค่เพิ่ม a >สิ้นสุดหรือสลับลำดับ x และ y
Jo King เมื่อ

@ JoKing ฝ่ามือของฉันกระแทกใบหน้าของฉันอย่างหนักตอนนี้ ขอบคุณ!
Khuldraeseth na'Barya

ทำไมคุณถึงรบกวนเซ็นเซอร์ "สมอง" แต่ไม่ใช่คำที่สองในชื่อภาษาการเขียนโปรแกรม
MilkyWay90


1

05AB1E , 9 ไบต์

`©GDŠ+}®@

ลองออนไลน์!

คำอธิบาย

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

ความจริง88 88ไบต์

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

สิ่งนี้จะผ่านการทดสอบที่เสนอ (ดัชนี 0)

(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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.