Dalam Angka Fibonacci


20

Tantangan

Diberikan input integer, kembalikan angka Fibonacci pertama yang berisi input itu sendiri bersama dengan indeks angka Fibonacci tersebut (indeks mulai dari 0 atau 1 - terserah Anda, tetapi tolong sebutkan yang mana dalam jawaban Anda). Misalnya, jika diberi input 12, program akan kembali 26: 121393karena 12 ditemukan dalam angka ( 12 1393) dan berada pada indeks 26 dari angka Fibonacci.

Contohnya

Diberikan input:

45

Program Anda harus menampilkan:

33: 3524578

Memasukkan:

72

Keluaran:

54: 86267571272

Memasukkan:

0

Keluaran:

0: 0

Memasukkan:

144

Keluaran:

12: 144

Mencetak gol

Ini adalah , jadi jawaban tersingkat di setiap bahasa menang.


Bisakah kita memilih pengindeksan 1 saja?
Tn. Xcoder

1
Bukan duplikat, tapi cukup dekat dengan tantangan ini .
Lynn

1
Arahkan pada matematika tentang apakah urutan Fibonacci normal atau tidak (pertanyaan ini mengandaikannya).
AdmBorkBork

1
Apakah kita harus menggunakan titik dua sebagai pemisah? Bisakah kita menampilkan array / daftar?
Shaggy

Jawaban:


8

Jelly , 10 byte

0ÆḞ©w¥1#;®

Cobalah online!

Bagaimana itu bekerja

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.

Anda menggunakan trik yang sama seperti milik saya. :)
Erik the Outgolfer

@EriktheOutgolfer Seperti milikmu?
Dennis

Tidak mempostingnya, tetapi umumnya saya juga tidak menggunakan D...
Erik the Outgolfer


4

Perl 6 , 30 byte

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

Cobalah online!

firstadalah fungsi yang mengembalikan elemen pertama dari urutan yang lulus tes, dan dengan mudah mengambil :kvkata keterangan yang memberitahukannya untuk mengembalikan kunci (indeks) dan nilai yang cocok.


Dengan asumsi Anda dapat mengembalikan objek Pair , Anda dapat menggunakan :pkata keterangan dan bukan :kv.
Brad Gilbert b2gills

3

Batch, 104 byte

@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%

Berfungsi n=0..45karena rentang terbatas dari aritmatika integer Batch. Penjelasan: Batch tidak memiliki uji kecocokan bawaan, tetapi ia memiliki operator yang dapat mengganti string literal dengan string literal lainnya, jadi misalnya if "%s:l=%"=="%s%"benar jika %s%tidak kosong tetapi tidak mengandung l. Penggunaan callkemudian merupakan trik untuk mengganti %1(input) ke dalam operator pengganti, namun calltidak bekerja pada laporan aliran kontrol sehingga tugas sementara antara diperlukan.



2

Javascript ES6, 68 karakter

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

Uji:

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 byte

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)

2

Emojicode , 133 byte

🐖🔢🍇🍮a 0🍮b 1🍮i 0🔁☁️🔍🔡a 10🔡🐕10🍇🍮b➕a b🍮a➖b a🍮i➕1i🍉😀🔡i 10😀🔡a 10🍉

Cobalah online!


1

Dyalog APL, 39 byte

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

Menggunakan rekursi ekor. Jangan coba 72, itu akan merusak mesin Anda karena menghitung ulang fibonacci di setiap panggilan.

Cobalah online!


1

Mathematica, 119 byte

1-diindeks

(T=ToString;If[(h=#)==0,"0:0",a=#&@@Select[k=T/@(Array[Fibonacci,9#]),StringContainsQ[#,T@h]&];Min@Position[k,a]":"a])&


Cobalah online!


1

Sebenarnya , 13 byte

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

Cobalah online!

Penjelasan:

╗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 byte

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

Rekursi standar untuk menghasilkan Fibnums, tetapi bukannya berhenti berdasarkan n, berakhir saat bcocok dengan regex x. Ini sebenarnya bekerja sangat baik. Saya berasumsi bahwa menggunakan regex dengan angka akan membutuhkan banyak kerumitan untuk mengubahnya menjadi string, tetapi itu sepertinya tidak perlu :)

Ini juga memiliki overshoot rekursi dengan 1 langkah, dengan memeriksa pada bbukan adan kemudian mengurangkan 1dari n. Ini untuk memastikan f(0)bekerja dengan baik.

Ini gagal untuk sebagian besar nilai ketika input melebihi 1001, karena maksint. Jika kami mengganti adan buntuk bigints, ini bekerja untuk input yang lebih tinggi (pengujian saat ini di 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 byte

-1 byte oleh Langkah Hen

-3 byte oleh Neil

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

1
Anda dapat menggunakan eval()alih-alih { return}untuk menyimpan byte, dan Anda dapat menghapus byte t=karena Anda tidak menggunakan rekursi:i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
Stephen

1
String.prototype.indexOfsecara otomatis mengubah parameternya menjadi string, tidak perlu melakukannya secara eksplisit. Anda juga tampaknya telah menyalin kesalahan ketik @ StepHen (Anda memiliki lebih (dari )s).
Neil

@Neil mengoceh salahku
Stephen

1

C # (.NET Core) , 99 byte

n=>{int a=0,b=1,c,d=0;for(;b.ToString().IndexOf(n.ToString())<0;c=a,a=b,b+=c,d++);return d+": "+b;}

Cobalah online!

Mengambil input sebagai integer, mengembalikan string dengan output.



1

PHP, 80 byte

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

Scriptnya cukup mudah, hanya menyimpan syarat urutan saat ini dan selanjutnya dalam $ a dan $ b secara keseluruhan. Untuk memungkinkan istilah 0 dari 0, $ a dan $ b awalnya diberi nilai untuk istilah -1th (1) dan 0th (0) masing-masing.

Kedua nilai dihitung ulang dalam satu ekspresi, yang merupakan dua penugasan dalam satu; secara efektif:

$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

Jika nilai input cocok dengan awal istilah, fungsi strpos () akan mengembalikan 0 (yang falsey dan akan memberikan negatif palsu), tetapi di Dunia PHP PHP, meskipun false == 0benar dan false < 0salah, false < -1itu benar! Jadi, menggunakan perbandingan ini menghemat lima byte dibandingkan dengan !==false.


1

Japt , 17 14 byte

Disimpan 3 byte berkat @JustinMariner

_ŬøU}a@[XMgX]

Cobalah online!

Penjelasan

_Ŭø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 byte: _ŬøU}a@[XMgX]. Menggunakan s1 q untuk mendapatkan item terakhir, yang memungkinkan menjatuhkan<space>s
Justin Mariner

@JustinMariner Itu ... itu jenius :-)
ETHproduksi

0

PHP , 163 141 byte

<?php $x=fgets(STDIN);$b=[0,1];if($x<1)$b=[0];for(;($c=count($b)-1)&&strpos($b[$c],$x)===false;){$b[]=$b[$c]+$b[$c-1];}die($c.': '.$b[$c]);?>

Cobalah online!

Penggunaan $b[0] = 0;dan $b[1] = 1;untuk memulai urutan fib



0

PHP , 93 byte

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

Simpel sederhana melalui urutan Fibonacci. Pemeriksaan untuk nomor input kami dilakukan di strpos(" $a[$i]","$argv[1]"); ruang ekstra karenastrpos akan mengembalikan false-y jika 'jarum' ditemukan di awal string. Kami berakhir jika input ditemukan dan menggemakan string yang diperlukan.

Cobalah online!


0

Gangguan Umum, 105 byte

(lambda(x)(do((a 0 b)(b 1(+ a b))(i 0(1+ i)))((search(#1=format()"~a"x)(#1#()"~a"a))(#1#()"~a: ~a"i a))))

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.