El reto esta vez es encontrar el n º Fibohexaprime . La definición de una Fibohexaprima es la siguiente:
Primero observamos una lista con 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
Después de eso, convertimos los números a hexadecimales:
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
De los números hexadecimales, filtramos las letras. Todo lo que nos queda son los números. Necesitamos verificar si estos números son 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
Si el número filtrado es primo, lo llamamos Fibohexaprime . Puede ver que para N = 7
, el número de Fibonacci relacionado es 987.
La tarea es simple, cuando se le da una entrada usando STDIN o una alternativa aceptable, escriba un programa o una función que genere la enésima Fibohexaprime usando STDOUT o una alternativa aceptable.
Casos de prueba
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
Las normas:
- Dado un número entero entre
1
y19
(los valores anteriores20
exceden el valor máximo para un entero con signo de 64 bits), genera el valor correspondiente. - Puedes escribir una función o un programa.
- Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Respuestas:
Pyth, 27 bytes
Demostración
y
calcula el enésimo número de Fibonacci. Un.f
bucle encuentra la fibohexaprima de acuerdo con la entrada.fuente
MATL , 28 bytes
Utiliza la versión 1.0.0 de MATL , que se publicó en Esolangs el 12 de diciembre, antes de este desafío.
Ejemplo
Explicación
El código es similar al de la respuesta de Martin Büttner .
fuente
CJam, 28 bytes
Pruébalo aquí.
Explicación
fuente
Perl 6 , 62 bytes
Mi primer paso de simplemente ponerlo a trabajar fue:
Al combinar el
grep
y elmap
, puedo eliminar 10 bytesSi uso en
grep
lugar demap
, guardo 5 bytes más:uso:
fuente
Mathematica 111 bytes
Todavía puede haber espacio para golf adicional.
fuente
Julia, 123 bytes
Esta es una función anónima que acepta un entero y devuelve un entero. Para llamarlo, dale un nombre, por ejemplo
f=n->...
.Sin golf:
fuente
BRECHA , 204 bytes
Esta respuesta es bastante sencilla, excepto que GAP es lo suficientemente genial como para poder encontrar las próximas dos fibohexaprimas (y aún más fresco, las encuentra en milisegundos con el código dado).
Tenga en cuenta que f (24) está entre 2 ^ 216 y 2 ^ 217.
Aquí está el código:
Probablemente todavía se pueda jugar al golf. Creo que la implementación es bastante sencilla.
Sin golf:
fuente
C,
186183bytesLa prueba de primalidad es muy ineficiente, por lo que la computación tendrá dificultades y será
n > 16
dolorosamente larga.n = 19
. Sin embargo, funciona y da los resultados esperados.El código supone que
size_t
es un tipo de 64 bits, lo cual es cierto tanto para Linux como para Windows de 64 bits.Bonificación: desafortunadamente estamos obligados a usar tipos de 64 bits, lo que lleva a una sobrecarga de 33 bytes. La siguiente versión funciona para
n <= 15
usarint
y tiene una longitud de 150 bytes:Prueba principal:
fuente
size_t
y soltando la inclusión? Es específico de la implementación, pero parece ser de 64 bits en gcc de Linux y Windows de 64 bits (¿y desde cuándo nos preocupamos por la portabilidad en codegolf?). (nota al margen:%ld
no es de 64 bits en Windows de 64 bits; necesita%lld
)size_t
no es una función integrada, está definida enstddef.h
(que a su vez está incluida directa o indirectamente en prácticamente cualquier otro encabezado). De una forma u otra, necesito un#include
. Todavía puedo guardar 2 bytes usando ensize_t
lugar deuint64_t
, aunque :)lld
bit, no tuve la oportunidad de probarlo en Windows (pero la portabilidad no importa, ¿verdad?)stdio.h
mientras estaba probando. En cualquier caso, aún podría salvar un par al incluirlo enmath.h
lugar de hacerlostddef.h
.math.h
no me sirve (GCC 4.9 con GNU libc)Python 2, 127 bytes
El algoritmo podría ser mucho más eficiente. En particular, la verificación de primalidad
(t>1)*all(t%x for x in range(2,t))
comprueba los factores potenciales hasta el finalt-1
, cuando realmente solo tendría que verificar hasta el piso de la raíz cuadrada . Comorange
almacena una lista completa en la memoria en Python 2, esto lleva a unMemoryError
atN=17
(en mi máquina usando la configuración predeterminada).fuente
Ruby, 160 bytes
Sin golf:
Uso:
fuente
R, 164 bytes
Sangrado, con nuevas líneas:
Ejemplos:
fuente