O desafio neste momento é encontrar o n º Fibohexaprime . A definição de um Fibohexaprime é a seguinte:
Primeiro observamos uma lista com números de Fibonacci:
N | Fibonacci number
1 | 1
2 | 1
3 | 2
4 | 3
5 | 5
6 | 8
7 | 13
8 | 21
9 | 34
10 | 55
11 | 89
12 | 144
13 | 233
14 | 377
15 | 610
16 | 987
17 | 1597
Depois disso, convertemos os números em hexadecimal:
N | Fib | Hex
1 | 1 | 1
2 | 1 | 1
3 | 2 | 2
4 | 3 | 3
5 | 5 | 5
6 | 8 | 8
7 | 13 | D
8 | 21 | 15
9 | 34 | 22
10 | 55 | 37
11 | 89 | 59
12 | 144 | 90
13 | 233 | E9
14 | 377 | 179
15 | 610 | 262
16 | 987 | 3DB
17 | 1597 | 63D
A partir dos números hexadecimais, filtramos as letras. Tudo o que nos resta são números. Precisamos verificar se esses números são primos:
hex | filtered | is prime? | N =
1 > 1 > false
1 > 1 > false
2 > 2 > true 1
3 > 3 > true 2
5 > 5 > true 3
8 > 8 > false
D > 0 > false
15 > 15 > false
22 > 22 > false
37 > 37 > true 4
59 > 59 > true 5
90 > 90 > false
E9 > 9 > false
179 > 179 > true 6
262 > 262 > false
3DB > 3 > true 7
63D > 63 > false
Se o número filtrado é primo, chamamos isso de Fibohexaprime . Você pode ver que N = 7
, o número de fibonacci relacionado é 987.
A tarefa é simples: quando receber uma entrada usando STDIN ou uma alternativa aceitável, escreva um programa ou uma função que produza a enésima Fibohexaprime usando STDOUT ou uma alternativa aceitável.
Casos de teste
Input - Output
1 - 2
2 - 3
3 - 5
4 - 55
5 - 89
6 - 377
7 - 987
8 - 28657
9 - 75025
10 - 121393
11 - 317811
12 - 5702887
13 - 9227465
14 - 39088169
15 - 102334155
16 - 32951280099
17 - 4052739537881
18 - 806515533049393
19 - 7540113804746346429
As regras:
- Dado um número inteiro entre
1
e19
(os valores acima20
excedem o valor máximo para um número inteiro assinado de 64 bits), imprima o valor correspondente. - Você pode escrever uma função ou um programa.
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Respostas:
Pitão, 27 bytes
Demonstração
y
calcula o enésimo número de Fibonacci. Um.f
loop encontra o fibohexaprime de acordo com a entrada.fonte
MATL , 28 bytes
Isso usa o MATL versão 1.0.0 , publicada em Esolangs em 12 de dezembro, anterior a esse desafio.
Exemplo
Explicação
O código é semelhante ao da resposta de Martin Büttner .
fonte
CJam, 28 bytes
Teste aqui.
Explicação
fonte
Perl 6 , 62 bytes
Meu primeiro passo de fazê-lo funcionar foi:
Ao combinar o
grep
emap
, posso remover 10 bytesSe eu usar em
grep
vez demap
, economizo mais 5 bytes:uso:
fonte
Mathematica 111 bytes
Ainda pode haver espaço para golfe adicional.
fonte
Julia, 123 bytes
Esta é uma função anônima que aceita um número inteiro e retorna um número inteiro. Para chamá-lo, dê um nome, por exemplo
f=n->...
.Ungolfed:
fonte
GAP , 204 bytes
Essa resposta é bastante comum, exceto que o GAP é legal o suficiente para encontrar os próximos dois fibohexaprimes (e mais frio ainda, encontra-os em milissegundos com o código fornecido).
Observe que f (24) está entre 2 ^ 216 e 2 ^ 217.
Aqui está o código:
Provavelmente ainda há algum golfe que poderia ser feito. Eu acho que a implementação é bem direta.
Ungolfed:
fonte
C,
186183 bytesO teste de primalidade é muito ineficiente, de modo que a computação se esforçará um pouco
n > 16
e se tornará dolorosamente longa paran = 19
. No entanto, funciona e fornece os resultados esperados.O código pressupõe que
size_t
é um tipo de 64 bits, que é verdadeiro para Linux e Windows de 64 bits.Bônus: infelizmente somos obrigados a usar tipos de 64 bits, o que leva a uma sobrecarga de 33 bytes. A versão seguinte funciona para
n <= 15
usarint
e é de 150 bytes de comprimento:Teste principal:
fonte
size_t
e soltando a inclusão? É específico da implementação, mas parece ser de 64 bits no Linux e no Windows gcc de 64 bits (e desde quando nos preocupamos com a portabilidade no codegolf?). (nota:%ld
não é de 64 bits no Windows de 64 bits; necessidades%lld
)size_t
não é um builtin, é definido emstddef.h
(que por sua vez é direta ou indiretamente incluído por praticamente qualquer outro cabeçalho). De um jeito ou de outro, eu preciso de um#include
. Eu ainda salvar 2 bytes por pode usarsize_t
em vez deuint64_t
, embora :)lld
pouco, eu não ter a oportunidade de testá-lo no Windows (mas portabilidade não importa, certo?)stdio.h
enquanto eu estava testando. De qualquer forma - você ainda pode salvar um casal incluindo, emmath.h
vez destddef.h
.math.h
não faz o truque para mim (GCC 4.9 com GNU libc)Python 2, 127 bytes
O algoritmo pode ser muito mais eficiente. Em particular, a verificação de primalidade
(t>1)*all(t%x for x in range(2,t))
verifica os fatores em potencial até ot-1
momento, quando, na verdade, seria necessário apenas verificar o nível da raiz quadrada . Comorange
armazena uma lista inteira na memória no Python 2, isso leva a umMemoryError
atN=17
(na minha máquina usando as configurações padrão).fonte
Ruby, 160 bytes
Ungolfed:
Uso:
fonte
R, 164 bytes
Recuado, com novas linhas:
Exemplos:
fonte