Dentro de los números de Fibonacci

20

El reto

Dada una entrada entera, devuelve el primer número de Fibonacci que contiene la entrada dentro de sí mismo junto con el índice de ese número de Fibonacci (índices que comienzan en 0 o 1, hasta usted, pero mencione cuál en su respuesta). Por ejemplo, si se le da la entrada de 12, el programa volvería 26: 121393ya que 12 se encuentra dentro del número ( 12 1393) y está en el índice 26 de los números de Fibonacci.

Ejemplos

Dada la entrada:

45

Su programa debería generar:

33: 3524578

Entrada:

72

Salida:

54: 86267571272

Entrada:

0

Salida:

0: 0

Entrada:

144

Salida:

12: 144

Puntuación

Este es el , por lo que gana la respuesta más corta en cada idioma.

SpookyGengar
fuente
¿Podemos elegir tener 1 indexación en su lugar?
Sr. Xcoder
1
No es un duplicado, pero está bastante cerca de este desafío.
Lynn
1
Pase por alto sobre las matemáticas con respecto a si la secuencia de Fibonacci es normal o no (esta pregunta supone que lo es).
AdmBorkBork
1
¿Tenemos que usar dos puntos como separador? ¿Podemos generar una matriz / lista?
Shaggy

Respuestas:

8

Jalea , 10 bytes

0ÆḞ©w¥1#;®

Pruébalo en línea!

Cómo funciona

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.
Dennis
fuente
Usaste el mismo truco que el mío. :)
Erik the Outgolfer
@EriktheOutgolfer ¿Como el tuyo?
Dennis
No lo D
publiqué
4

Perl 6 , 30 bytes

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

Pruébalo en línea!

firstes una función que devuelve el primer elemento de una secuencia que pasa una prueba, y convenientemente toma un :kvadverbio que le dice que devuelva tanto la clave (índice) como el valor coincidente.

Sean
fuente
Suponiendo que puede devolver un objeto Pair , puede usar el :padverbio en lugar de :kv.
Brad Gilbert b2gills
3

Lote, 104 bytes

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

Funciona n=0..45debido al rango limitado de la aritmética de enteros de Batch. Explicación: Batch no tiene una prueba de coincidencia incorporada, pero tiene un operador que puede reemplazar cadenas literales con otras cadenas literales, por lo que, por ejemplo, if "%s:l=%"=="%s%"es verdadero si %s%no está vacío pero no contiene l. El uso de calles entonces un truco para sustituir %1(la entrada) en el operador de reemplazo, sin embargo call, no funciona en las declaraciones de flujo de control, por lo que es necesaria una asignación temporal intermedia.

Neil
fuente
2

Javascript ES6, 68 caracteres

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

Prueba:

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

Qwertiy
fuente
2

Python 3, 76 bytes

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)
Levi
fuente
2

Emojicode , 133 bytes

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

Pruébalo en línea!

Betseg
fuente
1

Dyalog APL, 39 bytes

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

Usando la recursión de la cola. No intente 72, romperá su máquina porque está recalculando fibonacci en todas las llamadas.

Pruébalo en línea!

Uriel
fuente
1

Mathematica, 119 bytes

1 indexado

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


Pruébalo en línea!

J42161217
fuente
1

En realidad , 13 bytes

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

Pruébalo en línea!

Explicación:

╗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
Mego
fuente
1

R, 65 bytes

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 recursión estándar para generar Fibnums, pero en lugar de terminar en base a n, termina cuando bcoincide con la expresión regular x. Esto realmente funciona sorprendentemente bien. Supuse que usar expresiones regulares con números requeriría mucha molestia al convertirlos en cadenas, pero eso no parece ser necesario :)

Esto también tiene que sobrepasar la recursión por 1 paso, mediante la comprobación en blugar de ay después restando 1de n. Esto es para asegurarse de que f(0)funcione correctamente.

Esto falla para la mayoría de los valores cuando la entrada excede 1001, debido a maxint. Si reemplazamos ay bpara bigints, esto funciona para entradas más altas (las pruebas actuales están en 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))
JAD
fuente
1

JavaScript ES6, 79 78 75 bytes

-1 byte por paso gallina

-3 bytes por Neil

i=>eval('d=a=b=1;while(!~(a+"").indexOf(i)){c=b;b=a+b;a=c;‌​d++};d+": "+a')
Евгений Новиков
fuente
1
Puede usar en eval()lugar de { return}guardar un byte, y puede soltarlo t=ya que no está usando la recursividad:i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
Stephen
1
String.prototype.indexOfconvierte automáticamente su parámetro en una cadena, no es necesario hacerlo explícitamente. También parece que ha copiado el error tipográfico de @ StepHen (tiene más (s que )s).
Neil
@Neil woops my bad
Stephen
1

C # (.NET Core) , 99 bytes

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

Pruébalo en línea!

Toma la entrada como un entero, devuelve una cadena con la salida.

jkelm
fuente
1

PHP, 80 bytes

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

El guión es bastante sencillo, simplemente almacena los términos actuales y siguientes de la secuencia en $ a y $ b en todo momento. Para permitir el término 0 de 0, a $ a y $ b se les asignan inicialmente los valores para el término -1 (1) y el término 0 (0) respectivamente.

Ambos valores se recalculan en una sola expresión, que son dos asignaciones en una; efectivamente:

$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

Si el valor de entrada coincide con el comienzo del término, la función strpos () devolverá 0 (que es falsey y daría un falso negativo), pero en el mundo Wonderphul de PHP, aunque false == 0es verdadero y false < 0es falso, ¡ false < -1es verdadero! Y así, el uso de esta comparación ahorra cinco bytes en comparación con !==false.

WebSmithery
fuente
1

Japt , 17 14 bytes

Guardado 3 bytes gracias a @JustinMariner

_ŬøU}a@[XMgX]

Pruébalo en línea!

Explicación

_Ŭø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
ETHproducciones
fuente
14 Bytes: _ŬøU}a@[XMgX]. Utilizando s1 q para obtener el último elemento, lo que permite soltar el<space>s
Justin Mariner
@JustinMariner Eso es ... eso es genial :-)
ETHproductions
0

PHP , 163 141 bytes

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

Pruébalo en línea!

Usos $b[0] = 0;y $b[1] = 1;para el inicio de la secuencia fib

Mic1780
fuente
0

PHP , 93 bytes

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

Bucle simple a través de la secuencia de Fibonacci. La verificación de nuestro número de entrada se realiza en strpos(" $a[$i]","$argv[1]"); el espacio extra se debe a strposque devolverá falso-y si la 'aguja' se encuentra al comienzo de la cadena. Terminamos si se encuentra la entrada y hacemos eco de la cadena requerida.

Pruébalo en línea!

Xanderhall
fuente
0

Lisp común, 105 bytes

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

Pruébalo en línea!

Renzo
fuente