All'interno dei numeri di Fibonacci


20

La sfida

Dato un input intero, restituisci il primo numero di Fibonacci che contiene l'input al suo interno insieme all'indice di quel numero di Fibonacci (indici che iniziano da 0 o 1 - fino a te, ma per favore menziona quale nella tua risposta). Ad esempio, se viene fornito l'input di 12, il programma ritornerà 26: 121393quando 12 si trova all'interno del numero ( 12 1393) ed è all'indice 26 dei numeri di Fibonacci.

Esempi

Dato l'input:

45

Il tuo programma dovrebbe produrre:

33: 3524578

Ingresso:

72

Produzione:

54: 86267571272

Ingresso:

0

Produzione:

0: 0

Ingresso:

144

Produzione:

12: 144

punteggio

Questo è , quindi vince la risposta più breve in ogni lingua.


Possiamo scegliere invece di avere 1-indicizzazione?
Mr. Xcoder,

1
Non un duplicato, ma abbastanza vicino a questa sfida.
Lynn,

1
Passa in rassegna la matematica per sapere se la sequenza di Fibonacci è normale o meno (questa domanda presume che lo sia).
AdmBorkBork,

1
Dobbiamo usare i due punti come separatore? Possiamo produrre un array / elenco?
Shaggy,

Risposte:


8

Gelatina , 10 byte

0ÆḞ©w¥1#;®

Provalo online!

Come funziona

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.

Hai usato lo stesso trucco del mio. :)
Erik the Outgolfer,

@EriktheOutgolfer Come il tuo?
Dennis,

Non l'ho pubblicato, ma generalmente non ho usato Dneanche ...
Erik the Outgolfer,


4

Perl 6 , 30 byte

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

Provalo online!

firstè una funzione che restituisce il primo elemento di una sequenza che supera un test e richiede convenientemente un :kvavverbio che gli dice di restituire sia la chiave (indice) sia il valore corrispondente.


Supponendo che tu possa restituire un oggetto Pair , puoi usare l' :pavverbio invece di :kv.
Brad Gilbert b2gills il

3

Lotto, 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%

Funziona a n=0..45causa della gamma limitata dell'aritmetica intera di Batch. Spiegazione: Il batch non ha un test di corrispondenza incorporato, ma ha un operatore che può sostituire le stringhe letterali con altre stringhe letterali, quindi ad esempio if "%s:l=%"=="%s%"è vero se %s%non è vuoto ma non contiene l. L'uso di callè quindi un trucco per sostituire %1(l'input) callnell'operatore sostitutivo, tuttavia non funziona sulle istruzioni del flusso di controllo, quindi è necessaria un'assegnazione temporanea intermedia.



2

Javascript ES6, 68 caratteri

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 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🍉

Provalo online!


1

Dyalog APL, 39 byte

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

Usando la ricorsione della coda. Non tentare 72, si romperà la macchina perché il suo ricalcolo fibonacci dappertutto ogni chiamata.

Provalo online!


1

Mathematica, 119 byte

1-indicizzato

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


Provalo online!


1

In realtà , 13 byte

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

Provalo online!

Spiegazione:

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

La ricorsione standard per generare Fibnum, ma invece di terminare in base a n, termina quando bcorrisponde alla regex x. Questo in realtà funziona sorprendentemente bene. Ho pensato che l'uso di regex con i numeri avrebbe richiesto molta seccatura nel convertirli in stringhe, ma ciò non sembra essere necessario :)

Questo ha anche per oltrepassare la ricorsione da 1 passo, verificando sul bposto di ae poi sottraendo 1dal n. Questo per assicurarsi che f(0)funzioni correttamente.

Questo non riesce per la maggior parte dei valori quando l'input supera 1001, a causa di maxint. Se sostituiamo ae bper i bigints, questo funziona per input più alti (i test attuali sono a 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 di Step Hen

-3 byte di Neil

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

1
Puoi usare eval()invece di { return}salvare un byte, e puoi rilasciare il t=dato che non stai usando la ricorsione:i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
Stephen

1
String.prototype.indexOfconverte automaticamente il suo parametro in una stringa, non è necessario farlo esplicitamente. Inoltre sembra che tu abbia copiato l'errore di battitura di @ StepHen (hai più (s che )s).
Neil,

@Neil fa tremare il mio male
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;}

Provalo online!

Accetta l'input come numero intero, restituisce una stringa con l'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";

Lo script è abbastanza semplice, semplicemente memorizzando i termini attuali e successivi della sequenza in $ ae $ b. Per consentire il 0 ° termine di 0, a $ a e $ b vengono inizialmente assegnati i valori rispettivamente per -1 ° termine (1) e 0 ° termine (0).

Entrambi i valori vengono ricalcolati in una singola espressione, ovvero due assegnazioni in una; effettivamente:

$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

Se il valore di input corrisponde all'inizio del termine, la funzione strpos () restituirà 0 (che è falso e darebbe un falso negativo), ma nel mondo Wonderphul di PHP, sebbene false == 0sia vero ed false < 0è falso, false < -1è vero! E così, usando questo confronto si risparmiano cinque byte rispetto a !==false.


1

Japt , 17 14 byte

Salvato 3 byte grazie a @JustinMariner

_ŬøU}a@[XMgX]

Provalo online!

Spiegazione

_Ŭø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]. Usando s1 q per ottenere l'ultimo oggetto, che consente di rilasciare<space>s
Justin Mariner il

@JustinMariner Questo è ... è geniale :-)
ETHproductions

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

Provalo online!

Usi $b[0] = 0;e $b[1] = 1;per l'inizio della sequenza 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]";

Semplice ciclo attraverso la sequenza di Fibonacci. Il controllo per il nostro numero di input viene eseguito in strpos(" $a[$i]","$argv[1]"); lo spazio extra è perché strposrestituirà false-y se l'ago viene trovato all'inizio della stringa. Terminiamo se l'input viene trovato ed echeggiamo la stringa richiesta.

Provalo online!


0

Lisp comune, 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))))

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.