Reto
Debe escribir un programa que tome un entero positivo ncomo entrada y genere el nnúmero th Fibonacci (acortado como Fib # en todo) que contiene el nth Fib # como subcadena. Para los propósitos de este desafío, la secuencia de Fibonacci comienza con a 1.
Aquí hay algunos ejemplos que puede usar como casos de prueba, o como ejemplos para aclarar el desafío (para este último, deje un comentario a continuación explicando lo que no está claro).
n=1
Fib#s: 1
^1 1st Fib# that contains a 1 (1st Fib#)
Output: 1
n=2
Fib#s: 1, 1
^1 ^2 2nd Fib# that contains a 1 (2nd Fib#)
Output: 1
n=3
Fib#s: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233
^1 ^2 ^3 3rd Fib# that contains a 2 (3rd Fib#)
Output: 233
n=4
Output: 233
n=5
Output: 6765
n=6
Output: 28657
n=7
Output: 1304969544928657
n=8
Output: 14472334024676221
n=9
Output: 23416728348467685
n=10
Fib#s: 1, ..., 34, 55, 89, ..., 63245986, 102334155, 165580141, ..., 2880067194370816120, 4660046610375530309
^1 ^2 ^3 ^10 10th Fib# that contains a 55 (10th Fib#)
Output: 4660046610375530309
Como siempre, este es el código de golf , así que busque el menor recuento de bytes posible.
Si algo es confuso / poco claro, deje un comentario.
(Este desafío se basa en otro desafío que publiqué: imprima la enésima prima que contiene n )

n=5prueba, porque acabo de cometer un error tonto donde escribí un cheque que contó un número varias veces si tenía la subcadena más de una vez.n=5atraparía eso por el55.n=25(la salida tiene 1186 dígitos), luego se mata porn=26(3085 dígitos compilados en mi propia computadora portátil). Parece haber un salto en la dificultad cada vez quefib(n)obtiene un dígito más (como cabría esperar). El siguiente salto, 31, tiene 12990 dígitos en la salida final.Respuestas:
Haskell ,
8584 bytesEDITAR:
l.x>=sforx<=s) en explicación.ftoma unInty devuelve unString.Pruébalo en línea!
Cómo funciona
les la lista infinita de números de Fibonacci, definida recursivamente como las sumas parciales de0:1:l. Comienza con0porque las listas están indexadas en 0.mes la misma lista convertida en cadenas.f:nes el número de entrada yxes la (cadena del)nnúmero de Fibonacci.yes un número de Fibonacci probado para ver si contienexuna subcadena. Losys que pasan se recopilan en la lista y se indexan con el final!!npara dar el resultado. Sexantepone un extra a las pruebas para guardar dos bytes sobre el uso!!(n-1)al final.yvarias veces,yse envuelven las pruebas de cada unaory otra lista de comprensión.sitera a través de los sufijos dey.xes un prefijo des, verificamos six<=syx++":">s. (":"es algo arbitrario pero debe ser más grande que cualquier número).fuente
l=0:scanl(+)1lGuarda un byte.Jalea ,
1514 bytes1 byte gracias a Jonathan Allan.
Pruébalo en línea!
fuente
Python 2 ,
9986 bytesb=i=x=-1 a=1y soltando elx andf and n==2enf*(n>2)a,b=a+b,ataquigrafía de intercambio económicof-=str(x)in str(a), exprimido(n<2)*fPruébalo en línea!
Explicación:
Python 3 ,
12612011311211010199 bytesPruébalo en línea!
fuente
b=i=x=-1a=1y soltando elx and. (Esencialmente comenzando 3 pasos antes en la secuencia de Fibonacci de dos lados -1, 1, 0, 1, 1, 2, ....)-1: Pn==2realmente necesita un tratamiento especial. Pero se puede acortar a*(n>2).Java,
118111bytesSigo pensando que debería ser posible no duplicar el bit de Fibonacci, pero todos mis esfuerzos de alguna manera resultan en más bytes.
Gracias a Kevin por las mejoras ... supongo que muestra que este fue mi primer intento de jugar al golf :)
fuente
i->{long n=i,p=0,q,c=1;while(--n>0){q=p;p=c;c+=q;}n=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}return p;}(118 bytes)while(--n>0){q=p;p=c;c+=q;}puede serfor(;--n>0;p=c,c+=q)q=p;yn=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}puede serfor(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;. (En total:i->{long n=i,p=0,q,c=1;for(;--n>0;p=c,c+=q)q=p;for(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;return p;}( 111 bytes )Perl 6 , 45 bytes
$_es el argumento de la función;@fes la secuencia de Fibonacci, generada perezosamente.fuente
JavaScript (ES6),
9693929086 bytes0 indexado, con el número 0 en la secuencia
1. Mierda a las14.26 bytes guardados gracias a ArnauldIntentalo
Explicación
Versión actualizada a seguir, cuando tenga un minuto.
fuente
Carbón , 65 bytes
Pruébalo en línea! Enlace al código detallado para explicación.
fuente
PHP , 96 bytes
Pruébalo en línea!
fuente
Mathematica, 85 bytes
entrada
-4 bytes de @JungHwan Min
salida
fuente
f@i@n++es totalmente válido, disminuyendo 1 byte. Usar enForlugar deWhilereduce 3 bytes. 85 bytes:(i=ToString;f=Fibonacci;For[n=t=0,t<#,If[i@f@n++~StringContainsQ~i@f@#,t++]];f[n-1])&R,
7772 bytesEsto hace uso de la
gmpbiblioteca para el número de Fibonacci. Implementación bastante directa de la pregunta.Algunas pruebas
fuente
Clojure, 99 bytes
Una solución básica, utiliza una secuencia infinita de números de Fibonacci
s.fuente
C #, 35 bytes
Intentalo
fuente
ny simplemente pone la salida enb(creo). Podrías escribir esa tomancomo argumentos y devolucionesb... Además, estoy bastante seguro de que no estás calculando lo que los desafíos te piden. En realidad, no tengo idea de lo que estás computando. ¿Podría utilizar algún código que podamos ejecutar para verificar su solución? (su "Pruébelo" no se puede ejecutar como está ..)NewStack , 14 bytes
La caida:
En inglés: (con ejemplo de una entrada de 3)
N∞: Haz una lista de los números naturales[1,2,3,4,5,6...]ḟᵢ: Almacenar la entrada en la variablef[1,2,3,4,5,6...]fi: Convierta la lista a números de Fibonacci[1,1,2,3,5,8...]'fif: Mantenga todos los elementos que contengan elfnúmero de Fibonacci[2,21,233...]Ṗf⁻: Imprime elf-1elemento th (-1 debido a la indexación basada en 0)233fuente
Japt ,
1615 bytesIntentalo
fuente