맞춤형 피보나치 시퀀스 골프


25

피보나치 시퀀스는 주변에서 꽤 잘 알려진 일이다. 심지어 자체 태그가 있습니다. 그러나 모든 것을 위해 우리는 우리의 뿌리를 고수하고 싶습니다 1, 1, ...(또는 0, 1, ...우리는 결코 알지 못할 수도 있습니다 ...). 이 챌린지에서 규칙은 동일하지만 n피보나치 시퀀스에서 th 항목 을 얻는 대신에 피보나치 시퀀스로 nth 항목을 가져옵니다 x, y, ....

입력

원하는 순서대로 3 개의 정수 n출력 순서에서 용어의 색인 (0 또는 1 색인)입니다. x그리고 y현재 프로그램 실행의 피보나치 순서의 처음 두 항목입니다.

산출

n로 시작 피보나치 시퀀스 번째 항 x, y.

테스트 사례

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

입력 순서를 유의하십시오 (일관되어야 함).


목록을 입력으로 사용할 수 있습니까?
비즈니스 고양이

@BusinessCat 당신은 같은 의미 [1, 2, 3]입니까? 예. 3 개의 정수를 받아 들여야하는 것.
Stephen

@StephenS 방법으로 입력을 복용에 대한 n,[x,y]어디 n숫자입니다 xy숫자 목록에서? 그것은 아마도 약간 유연하지만;)
Tom

1
@ CAD97 추가하겠습니다. 잊어 버렸습니다 :)
Stephen

답변:


15

젤리 , 3 바이트

+¡ạ

취하고 , X , YN을 순서대로 별도의 명령 라인 인수 등 (인덱싱 0).

온라인으로 사용해보십시오!

작동 원리

+¡ạ  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"입니다. 나는 아직도 이것에 대해 멍청한 놈이므로, 이것을하는 더 좋은 방법이 있다는 것을 100 % 확신하지만, 나에게 "이것을해라"고 말하지 말고 나에게 힌트를 찾아서 스스로 대답을 찾을 수 있도록하십시오. 보다 나은. 감사!


1
ririri2 바이트로 단축 될 수 있습니다. fI1 바이트로 단축 될 수 있습니다.
Dennis

6
PPCG에 오신 것을 환영합니다!
마틴 엔더

@ 데니스 개선! 고맙습니다! 그리고 환영합니다.
FrodCube


9

자바 스크립트 (ES6), 27 26 바이트

여기서 공상적인 것은 없으며 초기 값이 0 및 1 인 표준 JS 피보나치 함수 만 제거되었습니다.

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>



5

하스켈 , 30 바이트

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

온라인으로 사용해보십시오! 인덱스가 0입니다. (x#y)n(0#1)5를 들어 원래 시퀀스의 다섯 번째 요소에 로 사용하십시오 .

Haskell에서 피보나치 시퀀스를 얻는 가장 짧은 방법 은 시퀀스를 포함 f=0:scanl(+)1f하는 무한 목록을 정의하는 것 f=[0,1,1,2,3,5,8,...]입니다. 교체 01인수 xy수율 사용자 정의 순서. (f!!)그런 다음의 n 번째 요소를 반환하는 함수입니다 f.


5

Mathematica, 36 바이트

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

입력

[n, x, y]


1
##2대신 사용할 수 있습니다 #2,#3.
alephalpha

아주 좋아요! 결정된!
J42161217



4

루비, 27 바이트

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

3

젤리 , 6 바이트

;SḊµ¡I

온라인으로 사용해보십시오!

설명

   µ¡  - 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 바이트

ē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

프롤로그 (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모두 xy= P

n+1초기 값을 포함하여 시퀀스의 수를 계산 합니다. 각 재귀는로 계산 n-1되고 when 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

공통 리스프, 49 바이트, 0 인덱스

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

나는 Lisp 멍청한 놈이므로 모든 팁을 주시면 감사하겠습니다.)

설명:

(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 바이트

-10을위한 @JoKing에게 감사합니다!

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

TIO는이 문제 (또는 숫자 관련 문제에 대한 BF 솔루션)에서 특히 잘 작동하지 않습니다. @Timwi의 EsotericIDE (또는 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).

n 만 움직일 수 있는데 왜 x와 y를 움직이지 않습니까? 온라인 시도
Jo King

@JoKing (그러나 더 길어 지지만) OP가 " -1-indexing"을 허용하지 않으면 제대로 작동하지 않습니다 .
Khuldraeseth na'Barya

아, 그냥 >끝에 추가 하거나 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

클라인 , 18 + 3 바이트

이것은 000토폴로지를 사용합니다

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

형식으로 입력을 전달하십시오 x y n.


1

공리, 88 57 바이트

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.