フィボナッチ数内


20

チャレンジ

整数の入力が与えられると、フィボナッチ数のインデックス(0または1から始まるインデックス-あなた次第ですが、答えはどれかを明記してください)とともに入力を含む最初のフィボナッチ数を返します。たとえば、12の入力が与えられた場合26: 121393、数値(12 1393)内で12が検出され、フィボナッチ数のインデックス26にあるため、プログラムは戻ります。

入力が与えられた場合:

45

プログラムは以下を出力するはずです。

33: 3524578

入力:

72

出力:

54: 86267571272

入力:

0

出力:

0: 0

入力:

144

出力:

12: 144

得点

これはであるため、各言語で最も短い回答が優先されます。


代わりに1インデックスを選択できますか?
ミスターXcoder

1
重複ではありませんが、この課題にかなり近いです。
リン

1
フィボナッチ数列が正常であるかどうかに関する数学のスレッド(この質問はそうであると仮定)。
AdmBorkBork

1
区切り文字としてコロンを使用する必要がありますか?配列/リストを出力できますか?
シャギー

回答:


8

ゼリー、10バイト

0ÆḞ©w¥1#;®

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

使い方

0ÆḞ©w¥1#;®  Main link. Argument: n

0           Set the return value to 0.
       #    Call the second link to the left with arguments k = 0, 1, 2, ... until
      1     one match has been found.
     ¥        Combine the two links to the left into a dyadich chain.
 ÆḞ             Compute the k-th Fibonacci number...
   ©              and copy it to the register.
    w           Yield 1 if n occurs inside the Fibonacci number, 0 otherwise.
         ®  Yield the value stored in the register.
        ;   Concatenate the index and the Fibonacci number.

私と同じトリックを使用しました。:)
エリック・ザ・アウトゴルファー

@EriktheOutgolferあなたのように?
デニス

投稿しませんでしたが、一般的にはDどちらも使用しませんでした...
Erik the Outgolfer


4

Perl 6、30バイト

{first :kv,/$_/,(0,1,*+*...*)}

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

firstは、テストに合格したシーケンスの最初の要素を返す関数で:kvあり、キー(インデックス)と一致する値の両方を返すように指示する副詞を便利に使用します。


Pairオブジェクトを返すことができると仮定すると、:pではなく副詞を使用できます:kv
ブラッドギルバートb2gills

3

バッチ、104バイト

@set/an=x=0,y=1
:l
@call set t=%%x:%1=%%
@if "%t%"=="%x%" set/an+=1,x+=y,y=x-y&goto l
@echo %n%: %x%

n=0..45Batchの整数演算の範囲が限られているために機能します。説明:バッチは内蔵の試合のテストはありませんが、それはそう、たとえば、他のリテラル文字列リテラル文字列を置き換えることができ、オペレータを持っているif "%s:l=%"=="%s%"場合はtrueで%s%、空ではなく、含まれていませんl。の使用callは、%1(入力)を置換演算子に置き換えるトリックですが、call制御フローステートメントでは機能しないため、中間の一時的な割り当てが必要です。



2

Javascript ES6、68文字

n=>eval('for(q=x=0,y=1;!`${x}`.match(n);++q)[x,y]=[y,x+y];q+": "+x')

テスト:

f=n=>eval('for(q=x=0,y=1;!`${x}`.match(n);++q)[x,y]=[y,x+y];q+": "+x')
console.log([45,72,0,144].map(f).join`
`)


2

Python 3、76バイト

f=lambda n,l=[1,0]:str(n)in str(l[1])and(len(l)-2,l[1])or f(n,[l[0]+l[1]]+l)


1

Dyalog APL、39バイト

{⍺←0⋄∨/(⍕⍵)⍷⍕x←1∧+∘÷/0,⍺/1:⍺,x⋄(1+⍺)∇⍵}

末尾再帰を使用します。72を試行しないでください。すべての呼び出しでフィボナッチが再計算されるため、マシンが破損します。

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



1

実際には、13バイト

╗1⌠F$╜@c⌡╓i;F

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

説明:

╗1⌠F$╜@c⌡╓i;F
╗              save input in register 0
 1⌠F$╜@c⌡╓     smallest non-negative integer n where the following function returns truthy:
   F$            nth Fibonacci number, stringified
     ╜@c         count occurrences of input
          i;F  flatten the list, duplicate the index, and push the Fibonacci number at that index

1

R、65バイト

f=function(x,n=1,a=1,b=0)`if`(grepl(x,b),c(b,n-1),f(x,n+1,a+b,a))

Fibnumを生成するための標準的な再帰ですがn、に基づいて終了する代わりにb、regex に一致すると終了しますx。これは実際、驚くほどうまく機能します。数値で正規表現を使用すると、文字列に変換するのに多くの手間が必要になると思いましたが、それは必要ではないようです:)

これはまた、上で確認することにより、1つの工程で再帰をオーバーシュートしなければならないbのではなくa、その後substracting 1からn。これは、f(0)正しく動作することを確認するためです。

1001maxintのため、入力がを超えると、ほとんどの値でこれは失敗します。我々は交換する場合abbigintsのために、これは、より高い入力のために働く(現在のテストはですx = 11451

f=function(x,n=1,a=gmp::as.bigz(1),b=gmp::as.bigz(0))`if`(grepl(x,b),c(b,n-1),f(x,n+1,a+b,a))

1

JavaScript ES6、 79 78 75バイト

ステップ編で -1バイト

ニールによる-3バイト

i=>eval('d=a=b=1;while(!~(a+"").indexOf(i)){c=b;b=a+b;a=c;‌​d++};d+": "+a')

1
あなたは使用することができるeval()代わりの{ return}バイトを保存するために、あなたがドロップすることができt=、あなたが使用していないので、再帰を:i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
スティーブン・

1
String.prototype.indexOfパラメータを自動的に文字列に変換し、明示的に行う必要はありません。また、@ StepHenのタイプミスをコピーしたようです((sよりも)s が多い)。
ニール

@ニールは私の悪い
スティーブン



1

PHP、80バイト

<?php for($a=1,$b=$n=0;strpos($a=-$a+$b=$a+$b,"$argv[1]")<-1;$n++);echo"$n: $a";

このスクリプトは非常に簡単で、シーケンスの現在の用語と次の用語を$ aと$ b全体に保存するだけです。0の0番目の項を許可するために、$ aと$ bには最初にそれぞれ-1番目の項(1)と0番目の項(0)の値が割り当てられます。

両方の値は、1つの式で再計算されます。1つの式は2つの割り当てです。効果的に:

$b = $a + $b; // The next term is the sum of the two previous terms
$a = $b - $a; // The current term is now recalculated from the next and the previous

入力値が用語の先頭と一致する場合、strpos()関数は0(falseyでfalse negativeを返します)を返しますが、PHPのWonderphul Worldでは、false == 0trueおよびfalse < 0falseですfalse < -1がtrueです!したがって、この比較を使用すると、と比較して5バイト節約され!==falseます。


1

Japt17 14バイト

@JustinMarinerのおかげで3バイト節約

_ŬøU}a@[XMgX]

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

説明

_ŬøU}a@[XMgX]      Implicit: U = input integer
      a@            For each integer X in [0, 1, 2, ...]:
        [XMgX]        take [X, Fibonacci(X)].
_    }a             Return the first pair where
 Å                    all but the first item
  ¬                   joined on the empty string (simply returns Fibonacci(X) as a string)
   øU                 contains U.
                    Implicit: output result of last expression

14バイト:_ŬøU}a@[XMgX]。を使用s1 q して、最後のアイテムを取得し、ドロップすることができます<space>s
ジャスティンマリナー

@JustinMarinerそれは...それは天才だ:
ETHproductions



0

PHP、93バイト

for($a[0]=$a[1]++;!strpos(" $a[$i]","$argv[1]");$a[$i+2]=$a[$i+1]+$a[$i++]);echo"$i: $a[$i]";

フィボナッチ数列の単純なループ。入力番号のチェックはで行われstrpos(" $a[$i]","$argv[1]")ます; 余分なスペースはstrpos、文字列の先頭に「針」が見つかった場合にfalse-yを返すためです。入力が見つかったら終了し、必要な文字列をエコーアウトします。

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.