W obrębie liczb Fibonacciego


20

Wyzwanie

Biorąc pod uwagę liczbę całkowitą, zwróć pierwszą liczbę Fibonacciego, która zawiera dane wejściowe w sobie, wraz z indeksem tej liczby Fibonacciego (indeksy zaczynające się od 0 lub 1 - zależnie od ciebie, ale proszę wspomnij o tym w odpowiedzi). Na przykład, jeśli podano wartość 12, program powróciłby, 26: 121393ponieważ 12 znajduje się w liczbie ( 12 1393) i ma indeks 26 liczb Fibonacciego.

Przykłady

Biorąc pod uwagę wkład:

45

Twój program powinien wypisać:

33: 3524578

Wkład:

72

Wynik:

54: 86267571272

Wkład:

0

Wynik:

0: 0

Wkład:

144

Wynik:

12: 144

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w każdym języku.


Czy zamiast tego możemy wybrać indeksowanie 1?
Pan Xcoder

1
Nie duplikat, ale dość blisko tego wyzwania.
Lynn

1
Omów matematykę, czy sekwencja Fibonacciego jest normalna, czy nie (pytanie to zakłada).
AdmBorkBork

1
Czy musimy używać dwukropka jako separatora? Czy możemy wyprowadzić tablicę / listę?
Kudłaty

Odpowiedzi:


8

Galaretka , 10 bajtów

0ÆḞ©w¥1#;®

Wypróbuj online!

Jak to działa

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.

Użyłeś tej samej sztuczki, co moja. :)
Erik the Outgolfer

@EriktheOutgolfer As your?
Dennis

Nie opublikowałem tego, ale ogólnie nie użyłem Dteż ...
Erik the Outgolfer


4

Perl 6 , 30 bajtów

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

Wypróbuj online!

firstjest funkcją, która zwraca pierwszy element sekwencji, która przechodzi test, i wygodnie przyjmuje :kvprzysłówek, który mówi mu, aby zwrócił zarówno klucz (indeks), jak i pasującą wartość.


Zakładając, że możesz zwrócić obiekt Para , możesz użyć :pprzysłówka zamiast :kv.
Brad Gilbert b2gills 28.07.17

3

Partia, 104 bajty

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

Działa z n=0..45powodu ograniczonego zakresu arytmetyki liczb całkowitych Batcha. Objaśnienie: Partia nie ma wbudowanego testu dopasowania, ale ma operator, który może zastąpić dosłowne ciągi innymi literałowymi ciągami, więc na przykład if "%s:l=%"=="%s%"jest prawdą, jeśli %s%nie jest pusty, ale nie zawiera l. Użycie calljest wtedy sztuczką, aby zastąpić %1(dane wejściowe) operator zastępczy, jednak callnie działa na instrukcjach przepływu sterowania, więc konieczne jest tymczasowe przypisanie pośrednie.



2

JavaScript ES6, 68 znaków

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

Test:

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 bajtów

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 bajtów

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

Korzystanie z rekurencji ogona. Nie próbuj 72, to zepsuje twoją maszynę, ponieważ przelicza fibonacciego po każdym połączeniu.

Wypróbuj online!


1

Mathematica, 119 bajtów

1-indeksowany

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


Wypróbuj online!


1

Właściwie 13 bajtów

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

Wypróbuj online!

Wyjaśnienie:

╗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 bajtów

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

Standardowa rekurencja do generowania Fibnum, ale zamiast kończenia na podstawie n, kończy się, gdy bpasuje do wyrażenia regularnego x. To faktycznie działa zaskakująco dobrze. Założyłem, że użycie wyrażenia regularnego z cyframi wymagałoby wiele kłopotów z konwersją ich na ciągi, ale nie wydaje się to konieczne :)

Musi to również przekroczyć rekurencję o 1 krok, zaznaczając bzamiast, aa następnie odejmując 1od n. Ma to na celu upewnienie się, że f(0)działa poprawnie.

Nie udaje się to w przypadku większości wartości, gdy wartość wejściowa przekracza 1001, z powodu wartości maksymalnej. Jeśli zastąpimy ai bdla bigintów, działa to na wyższe nakłady (bieżące testowanie jest na 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 bajtów

-1 bajt po kurie

-3 bajty autorstwa Neila

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

1
Możesz użyć eval()zamiast, { return}aby zapisać bajt, i możesz upuścić, t=ponieważ nie używasz rekurencji:i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
Stephen

1
String.prototype.indexOfautomatycznie konwertuje swój parametr na ciąg, nie trzeba tego robić jawnie. Wygląda na to, że skopiowałeś literówkę @ StepHen (masz więcej (niż )s).
Neil

@ Nee woops mój zły
Stephen

1

C # (.NET Core) , 99 bajtów

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;}

Wypróbuj online!

Pobiera dane wejściowe jako liczbę całkowitą, zwraca ciąg z danymi wyjściowymi.



1

PHP, 80 bajtów

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

Skrypt jest dość prosty, po prostu przechowuje bieżące i następne warunki sekwencji w $ a i $ b przez cały czas. Aby umożliwić zerowy semestr 0, $ a i $ b są początkowo przypisywane wartości odpowiednio dla 1-szego składnika (1) i 0-tego składnika (0).

Obie wartości są ponownie obliczane w jednym wyrażeniu, które jest dwoma przypisaniami w jednym; efektywnie:

$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

Jeśli wartość wejściowa pasuje do początku terminu, funkcja strpos () zwróci 0 (co jest falsey i dałoby fałszywy negatyw), ale w Wonderphul World PHP, chociaż false == 0jest prawdą i false < 0fałszem, false < -1jest prawdą! Tak więc użycie tego porównania pozwala zaoszczędzić pięć bajtów w porównaniu do !==false.


1

Japt , 17 14 bajtów

Zaoszczędź 3 bajty dzięki @JustinMariner

_ŬøU}a@[XMgX]

Wypróbuj online!

Wyjaśnienie

_Ŭø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 bajtów: _ŬøU}a@[XMgX]. Używanie w s1 q celu zdobycia ostatniego przedmiotu, który pozwala upuścić<space>s
Justin Mariner

@JustinMariner To ... to jest genialne :-)
ETHproductions

0

PHP , 163 141 bajtów

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

Wypróbuj online!

Wykorzystuje $b[0] = 0;i $b[1] = 1;do rozpoczęcia sekwencji Fib



0

PHP , 93 bajty

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

Prosta pętla przez sekwencję Fibonacciego. Sprawdzanie naszego numeru wejściowego odbywa się w strpos(" $a[$i]","$argv[1]"); dodatkowa spacja polega na tym, że strposzwróci false-y, jeśli „igła” zostanie znaleziona na początku łańcucha. Kończymy, jeśli dane wejściowe zostaną znalezione, i wygenerujemy wymagany ciąg znaków.

Wypróbuj online!


0

Common Lisp, 105 bajtów

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

Wypróbuj online!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.