Le défi cette fois est de trouver le n ème Fibohexaprime . La définition d'un Fibohexaprime est la suivante:
Nous observons d'abord une liste avec des nombres 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
Après cela, nous convertissons les nombres en hexadécimal:
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
À partir des nombres hexadécimaux, nous filtrons les lettres. Il ne nous reste que des chiffres. Nous devons vérifier si ces nombres sont premiers:
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 le nombre filtré est un nombre premier, nous appelons cela un Fibohexaprime . Vous pouvez voir que pour N = 7
, le nombre de fibonacci associé est 987.
La tâche est simple, quand on lui donne une entrée en utilisant STDIN ou une alternative acceptable, écrire un programme ou une fonction qui sort le nième Fibohexaprime en utilisant STDOUT ou une alternative acceptable.
Cas de test
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
Les règles:
- Étant donné un entier compris entre
1
et19
(les valeurs ci-dessus20
dépassent la valeur maximale pour un entier signé 64 bits), affichez la valeur correspondante. - Vous pouvez écrire une fonction ou un programme.
- C'est du code-golf , donc la soumission avec le moins d'octets gagne!
Réponses:
Pyth, 27 octets
Manifestation
y
calcule le nième nombre de Fibonacci. Une.f
boucle trouve le fibohexaprime en fonction de l'entrée.la source
MATL , 28 octets
Cela utilise MATL version 1.0.0 , qui a été publiée dans Esolangs le 12 décembre, avant ce défi.
Exemple
Explication
Le code est similaire à celui de la réponse de Martin Büttner .
la source
CJam, 28 octets
Testez-le ici.
Explication
la source
Perl 6 , 62 octets
Mon premier passage pour le faire fonctionner était:
En combinant le
grep
et lemap
, je peux supprimer 10 octetsSi j'utilise à la
grep
place demap
, j'économise 5 octets supplémentaires:usage:
la source
Mathematica 111 octets
Il peut encore y avoir de la place pour jouer au golf.
la source
Julia, 123 octets
Il s'agit d'une fonction anonyme qui accepte un entier et renvoie un entier. Pour l'appeler, donnez-lui un nom, par exemple
f=n->...
.Non golfé:
la source
ÉCART , 204 octets
Cette réponse est assez banale, sauf que GAP est assez cool pour être en mesure de trouver les deux prochains fibohexaprimes (et plus cool encore, il les trouve en millisecondes avec le code donné).
Notez que f (24) est compris entre 2 ^ 216 et 2 ^ 217.
Voici le code:
Il y a probablement encore du golf à faire. Je pense que la mise en œuvre est assez simple.
Non golfé:
la source
C,
186183 octetsLe test de primalité est très inefficace, donc le calcul peinera un peu
n > 16
et deviendra douloureusement long pourn = 19
. Néanmoins, cela fonctionne et donne les résultats escomptés.Le code suppose qu'il
size_t
s'agit d'un type 64 bits, ce qui est vrai pour Linux 64 bits et Windows.Bonus: malheureusement, nous sommes tenus d'utiliser des types 64 bits, ce qui entraîne une surcharge de 33 octets. La version suivante fonctionne pour l'
n <= 15
utilisationint
et a une longueur de 150 octets:Test principal:
la source
size_t
et en supprimant l'inclusion? Il est spécifique à l'implémentation, mais semble être 64 bits dans gcc Linux et Windows 64 bits (et depuis quand nous sommes-nous souciés de la portabilité dans codegolf?). (note latérale:%ld
n'est pas 64 bits dans Windows 64 bits; a besoin%lld
)size_t
n'est pas une fonction intégrée, il est défini dansstddef.h
(qui à son tour est directement ou indirectement inclus par pratiquement n'importe quel autre en-tête). D'une manière ou d'une autre, j'ai besoin d'un#include
. Je peux toujours enregistrer 2 octets en utilisantsize_t
au lieu deuint64_t
, cependant :)lld
bit, je n'ai pas eu la chance de le tester sur Windows (mais la portabilité n'a pas d'importance, non?)stdio.h
mes tests. Dans tous les cas, vous pouvez toujours enregistrer un couple en incluantmath.h
au lieu destddef.h
.math.h
ne fait pas l'affaire pour moi (GCC 4.9 avec GNU libc)Python 2, 127 octets
L'algorithme pourrait être beaucoup plus efficace. En particulier, le contrôle de primalité
(t>1)*all(t%x for x in range(2,t))
vérifie les facteurs potentiels jusqu'à la fint-1
, alors qu'il ne faudrait que vérifier jusqu'au sol de la racine carrée . Étant donné querange
stocke une liste entière en mémoire dans Python 2, cela conduit à unMemoryError
atN=17
(sur ma machine en utilisant les paramètres par défaut).la source
Rubis, 160 octets
Non golfé:
Usage:
la source
R, 164 octets
En retrait, avec de nouvelles lignes:
Exemples:
la source