Fibonacci Sayıları İçinde


20

Meydan okuma

Bir tamsayı girdisi verildiğinde, kendi içinde girişi içeren ilk Fibonacci numarasını, bu Fibonacci sayısının indeksiyle birlikte (0 veya 1'den başlayan indeksler size döner, ancak lütfen cevabınızda hangisini belirtiniz). Örneğin, 12 girişi verilirse, program 26: 121393( 12 1393) sayısı içinde 12 bulunduğu ve Fibonacci sayılarının 26 indeksinde olduğu için geri dönecektir .

Örnekler

Girdi verildiğinde:

45

Programınızın çıktısı:

33: 3524578

Giriş:

72

Çıktı:

54: 86267571272

Giriş:

0

Çıktı:

0: 0

Giriş:

144

Çıktı:

12: 144

puanlama

Bu , bu yüzden her dilde en kısa cevap kazanır.


Bunun yerine 1 endekslemeyi seçebilir miyiz?
Bay Xcoder

1
Kopya değil, ama bu meydan okumaya oldukça yakın .
Lynn

1
Fibonacci dizisinin normal olup olmadığı konusunda matematik üzerine konu (bu soru öyle olduğunu varsayar).
AdmBorkBork

1
Ayırıcı olarak iki nokta üst üste kullanmak zorunda mıyız? Bir dizi / liste çıkarabilir miyiz?
Shaggy

Yanıtlar:


8

Jöle , 10 bayt

0ÆḞ©w¥1#;®

Çevrimiçi deneyin!

Nasıl çalışır

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.

Benimkiyle aynı numarayı kullandın. :)
Outgolfer Erik

@EriktheOutgolfer Sizinki gibi mi?
Dennis

Bunu yayınlamadım, ama genellikle ben de kullanmadım D...
Outgolfer Erik


4

Perl 6 , 30 bayt

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

Çevrimiçi deneyin!

firstbir testi geçen bir dizinin ilk öğesini döndüren bir işlevdir ve ona :kvhem anahtarı (dizin) hem de eşleşen değeri döndürmesini söyleyen bir zarf alır .


Bir Pair nesnesi döndürebileceğinizi varsayarsak , :pbunun yerine zarfı kullanabilirsiniz :kv.
Brad Gilbert b2gills

3

Toplu, 104 bayt

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

Batch'ın n=0..45tamsayı aritmetiğinin sınırlı aralığı nedeniyle çalışır . Açıklama: Toplu işte yerleşik bir eşleşme testi yoktur, ancak değişmez dizeleri diğer değişmez dizelerle değiştirebilen bir işleç vardır, bu nedenle örneğin boş değilse ancak içermiyorsa if "%s:l=%"=="%s%"doğrudur . Bu durumda, kullanımı , değiştirme operatörünün yerine (girdi) ikame etmek için bir hiledir , ancak kontrol akış ifadeleri üzerinde çalışmaz, bu nedenle bir ara geçici atama gereklidir.%s%lcall%1call



2

Javascript ES6, 68 karakter

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

Ölçek:

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 bayt

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 bayt

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

Kuyruk özyineleme kullanma. 72 denemeyin, makinenizi kıracak çünkü her çağrıda fibonacci yeniden hesaplıyor.

Çevrimiçi deneyin!


1

Mathematica, 119 bayt

1 endeksli

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


Çevrimiçi deneyin!


1

Aslında 13 bayt

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

Çevrimiçi deneyin!

Açıklama:

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

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

Fibnums oluşturmak için standart özyineleme, ancak regex ile eşleştiğinde sona ermek yerine sona nerer . Bu aslında şaşırtıcı derecede iyi çalışıyor. Ben regex sayısal olarak kullanmanın onları dizeleri dönüştürmek güçlük gerektireceğini varsaydı, ancak bu gerekli görünmüyor :)bx

Bu aynı zamanda kontrol ederek, 1 adım Özyinelemeyi aşmasına sahiptir byerine ave sonra substracting 1gelen n. Bu, f(0)düzgün çalıştığından emin olmak içindir.

Bu 1001, maksint nedeniyle giriş aşıldığında çoğu değer için başarısız olur . Değiştirirsek ave bbigints için, bu daha yüksek girişler için çalışır (akım testi şu şekildedir 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 bayt

Adım Hen ile -1 bayt

-3 bayt / Neil

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

1
Bir bayt kaydetmek eval()yerine kullanabilirsiniz { return}ve t=özyineleme kullanmadığınız için bırakabilirsiniz :i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
Stephen

1
String.prototype.indexOfparametresini otomatik olarak bir dizeye dönüştürür, açıkça yapmanıza gerek yoktur. Ayrıca @ StepHen's yazım hatası kopyaladınız ( (s'den daha fazlasına sahipsiniz )).
Neil

@Neil woops my bad
Stephen



1

PHP, 80 bayt

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

Betik oldukça basittir, dizinin şu anki ve sonraki terimlerini $ a ve $ b'de saklar. 0'ın 0 terimine izin vermek için, başlangıçta sırasıyla 1. terim (1) ve 0 terim (0) için değerler atanır.

Her iki değer de tek bir ifadede yeniden hesaplanır, bu bir birinde iki ödevdir; etkili bir şekilde:

$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

Girdi değeri terimin başlangıcıyla eşleşirse, strpos () işlevi 0 döndürür (bu falseydir ve yanlış negatif verir), ancak PHP'nin Wonderphul Dünyasında false == 0doğru ve false < 0yanlış olmasına rağmen false < -1doğrudur! Böylece, bu karşılaştırmayı kullanmak beş bayt tasarruf sağlar !==false.


1

Japt , 17 14 bayt

@JustinMariner sayesinde 3 bayt kaydedildi

_ŬøU}a@[XMgX]

Çevrimiçi deneyin!

açıklama

_Ŭø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 bayt: _ŬøU}a@[XMgX]. Kullanmayı s1 q bırakan son öğeyi almak için kullanma<space>s
Justin Mariner

@JustinMariner Bu ... bu dahi :-)
ETHproductions

0

PHP , 163141 bayt

<?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]);?>

Çevrimiçi deneyin!

Fib dizisinin kullanımı $b[0] = 0;ve $b[1] = 1;başlangıcı için



0

PHP , 93 bayt

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

Fibonacci dizisi boyunca basit döngü. Giriş numaramızın kontrolü şu şekilde yapılır strpos(" $a[$i]","$argv[1]"); strposdize başlangıcında 'iğne' bulunursa , fazladan boşluk false-y döndürecektir. Giriş bulunursa sonlandırır ve gerekli dizeyi yankılarız.

Çevrimiçi deneyin!


0

Ortak Lisp, 105 bayt

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.