Desafio
Você deve escrever um programa que use um número inteiro positivo n
como entrada e produza o n
th número de Fibonacci (abreviado como Fib # por toda parte) que contém o n
th Fib # como uma subtração. Para os propósitos deste desafio, a sequência de Fibonacci começa com a 1
.
Aqui estão alguns exemplos que você pode usar como casos de teste ou como exemplos para esclarecer o desafio (para o último, deixe um comentário abaixo, explicando o que você acha incerto).
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 sempre, isso é código-golfe , então escolha a menor contagem de bytes possível.
Se algo estiver confuso / claro, deixe um comentário.
(Esse desafio se baseia em outro desafio que publiquei: Imprima o enésimo primo que contém n )
n=5
teste, porque acabei de cometer um erro bobo em que escrevi uma verificação que contava várias vezes se ela tivesse a substring mais de uma vez.n=5
pegaria isso por causa do55
.n=25
(a saída possui 1186 dígitos) e depois é eliminada porn=26
(3085 dígitos compilados no meu próprio laptop). Parece haver um salto de dificuldade sempre quefib(n)
obtém mais um dígito (como seria de esperar). O próximo salto, 31, possui 12990 dígitos na saída final.Respostas:
Haskell ,
8584 bytesEDITAR:
l
.x>=s
parax<=s
) na explicação.f
pega umInt
e retorna umString
.Experimente online!
Como funciona
l
é a lista infinita de números de Fibonacci, definida recursivamente como as somas parciais de0:1:l
. Começa com0
porque as listas são indexadas em 0.m
é a mesma lista convertida em seqüências de caracteres.f
:n
é o número de entrada ex
é a (sequência do)n
th número de Fibonacci.y
é testado um número de Fibonacci para saber se ele contémx
como substring. Osy
s de passagem são coletados na lista e indexados com o final!!n
para fornecer a saída. Um extrax
é anexado aos testes para economizar dois bytes ao longo do uso!!(n-1)
no final.y
s várias vezes, os testes de cada umy
são incluídosor
e outra compreensão da lista.s
itera pelos sufixos dey
.x
é um prefixo des
, verificamos sex<=s
ex++":">s
. (":"
é um tanto arbitrário, mas precisa ser maior que qualquer número).fonte
l=0:scanl(+)1l
salva um byte.Geléia ,
1514 bytes1 byte graças a Jonathan Allan.
Experimente online!
fonte
Python 2 ,
9986 bytesb=i=x=-1 a=1
e soltando ox and
f and n==2
paraf*(n>2)
a,b=a+b,a
shorthand de swap econômicof-=str(x)in str(a)
, espremido(n<2)*f
Experimente online!
Explicação:
Python 3 ,
12612011311211010199 bytesExperimente online!
fonte
b=i=x=-1
a=1
e soltando ox and
. (Essencialmente começando 3 passos anteriores no dois lados sequência de Fibonacci -1, 1, 0, 1, 1, 2, ....)-1
: Pn==2
realmente precisar de tratamento especial. Mas pode ser reduzido para*(n>2)
.Java,
118111 bytesEu continuo pensando que deveria ser possível não duplicar o bit Fibonacci, mas todos os meus esforços resultam em mais bytes.
Graças a Kevin por melhorias ... acho que mostra que esta foi minha primeira tentativa de jogar golfe :)
fonte
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;}
podem serfor(;--n>0;p=c,c+=q)q=p;
en=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}
podem serfor(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;
. (No 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
$_
é o argumento para a função;@f
é a sequência de Fibonacci, gerada preguiçosamente.fonte
JavaScript (ES6),
9693929086 bytesIndexado em 0, com o 0º número na sequência
1
. Dados em14
.26 bytes economizados graças ao ArnauldTente
Explicação
Versão atualizada a seguir, quando recebo um minuto.
fonte
Carvão , 65 bytes
Experimente online! Link para código detalhado para explicação.
fonte
PHP , 96 bytes
Experimente online!
fonte
Mathematica, 85 bytes
entrada
-4 bytes de @JungHwan Min
saída
fonte
f@i@n++
é totalmente válido, diminuindo 1 byte. Usar emFor
vez deWhile
reduz 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 bytesIsso faz uso da
gmp
biblioteca para o número de Fibonacci. Implementação bastante direta da questão.Alguns testes
fonte
Clojure, 99 bytes
Uma solução básica, usa uma sequência infinita de números de Fibonacci
s
.fonte
C #, 35 bytes
Tente
fonte
n
e você apenas coloca a saídab
(eu acho). Você pode escrever isson
como argumentos e retornosb
... Além disso, tenho certeza de que você não está computando o que os desafios exigem. Na verdade, não tenho ideia do que você está computando. Você poderia fornecer algum código que possamos executar para verificar sua solução? (seu "Experimente" não pode ser executado como está ..) #NewStack , 14 bytes
O colapso:
Em inglês: (com exemplo de uma entrada 3)
N∞
: Faça uma lista dos números naturais[1,2,3,4,5,6...]
ḟᵢ
: Armazene a entrada na variávelf
[1,2,3,4,5,6...]
fi
: Converta a lista em números de Fibonacci[1,1,2,3,5,8...]
'fif
: Mantenha todos os elementos que contêm of
número de Fibonacci[2,21,233...]
Ṗf⁻
: Imprime of-1
elemento th (-1 devido à indexação baseada em 0)233
fonte
Japonês ,
1615 bytesTente
fonte