カスタムフィボナッチシーケンスのゴルフ


25

フィボナッチ数列は、この辺りではかなりよく知られています。ちなみに、独自のタグもあります。しかし、そのすべてのために、私たちは私たちのルーツに固執したいのです1, 1, ...(またはそれ0, 1, ...ですか?私たちは決して知らないかもしれません...)。このチャレンジでは、ルールは同じですがn、フィボナッチ数列のth項目を取得する代わりnに、フィボナッチ風シーケンスのth項目を取得しx, y, ...ます。

入力

好きな順番で3つの整数。n出力のシーケンス内の用語のインデックス(0または1インデックス)です。xそしてy、あなたの現在のプログラムの実行のフィボナッチ数列の最初の2つの項目です。

出力

nで始まるフィボナッチ数列では番目の用語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ます。

入力順序に注意してください(一定でなければなりません)。


入力としてリストを取得できますか?
ビジネスキャット

@BusinessCatはどういう意味[1, 2, 3]ですか?はい。3つの整数を受け入れる必要があるものは何でも。
スティーブン

どのように、入力を服用について@StephenS n,[x,y]ところn数であり、xかつy、リスト内の数字ですか?それはおそらく少し柔軟すぎるかもしれません;)
トム

1
@ CAD97私はそれらを追加します、私はそれらを忘れていました:)
スティーブン

回答:


15

ゼリー、3バイト

+¡ạ

xy、およびn(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

CJam14 9バイト

l~{_@+}*;

オンラインでお試しください!

入力形式は「xy n」です。私はまだこれに慣れていないので、これを行うためのより良い方法があることは100%確信していますが、「これを行う」と言うのではなく、自分で答えを見つけて得るためにヒントだけを与えてくださいより良い。ありがとう!


1
ririri2バイトに短縮できます。fI1バイトに短縮できます。
デニス

6
PPCGへようこそ!
マーティンエンダー

@デニスが改善されました!ありがとうございました!そして、歓迎してくれてありがとう。
FrodCube


9

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

Haskell、30バイト

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

オンラインでお試しください!0インデックス付き。asを使用します(x#y)n(0#1)5元のシーケンスの5番目の要素など)。

Haskellでフィボナッチ数列を取得する最も可能性のある最短の方法はf=0:scanl(+)1ff=[0,1,1,2,3,5,8,...]数列を含む無限リストを定義することです。交換01引数を持つxy利回りカスタムシーケンス。(f!!)の場合、はのn番目の要素を返す関数ですf





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

オンラインでお試しください!

リーキー修道女の答えをゴルフで始めて、まったく違うものに到達しました。

これには、データベース管理(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(インデックス)、 、ab初期条件)。

:"     % 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、で停止しn==0ます。次に、2 n番目の数値の最小値が返され、-th値が返されます。




2

Common Lisp、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を移動する必要があるのですか?オンラインで試す
ジョーキング

@JoKingそれを考慮しました(しかし、私自身はもっと長い)が、OPが " -1-indexing"を許可しない限り、それはまったく機能しません。
フルドレーゼスナバルヤ

ああ、>最後にa を追加するか、xとyの順序を入れ替える
ジョーキング

@JoKing今、私の手のひらがかなり激しく顔を打ちました。ありがとう!
フルドレーゼスナバルヤ

なぜプログラミング言語の名前の2番目の単語ではなく「頭脳」を検閲することにしたのですか?
MilkyWay90





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.