Défi
Vous devez générer un programme ou une fonction qui prend un entier positif N, calcule les premiers N termes de la séquence de Fibonacci en binaire, la concatène en un seul nombre binaire, reconvertit ce nombre en décimal, puis sort la décimale sous la forme d'un entier.
Par exemple
1 -> [0] -> 0 to decimal outputs 0
3 -> [0, 1, 1] -> 011 to decimal outputs 3
4 -> [0, 1, 1, 10] -> 01110 to decimal outputs 14
Vous n'avez pas besoin de sortir le ->
, juste le numéro (par exemple si l'utilisateur tape 4
, juste de sortir 14
). Les flèches sont juste pour aider à expliquer ce que le programme doit faire.
Cas de test
1 -> 0
2 -> 1
3 -> 3
4 -> 14
5 -> 59
6 -> 477
7 -> 7640
8 -> 122253
9 -> 3912117
10 -> 250375522
11 -> 16024033463
12 -> 2051076283353
13 -> 525075528538512
14 -> 134419335305859305
15 -> 68822699676599964537
16 -> 70474444468838363686498
17 -> 72165831136090484414974939
18 -> 147795622166713312081868676669
19 -> 605370868394857726287334099638808
20 -> 4959198153890674493745840944241119317
Le programme doit pouvoir sortir jusqu'à la limite de la langue utilisée. Aucune table de recherche ou solution de contournement commune n'est autorisée.
C'est le code-golf , donc la réponse avec le plus petit nombre d'octets gagne!
int32_t binary_concat_Fib(int n)
, ce qui limiterait la valeur de sortie résultante à 2 ^ 31-1. c'est-à-dire que vous pouvez supposer que tous les bits concaténés tiennent dans un entier. Ou la fonction devrait-elle fonctionner jusqu'au point où le plus grand nombre de Fibonacci ne tient pas seul dans un entier, de sorte que la concaténation des bits nécessite une précision étendue?Réponses:
Python , 64 octets
Essayez-le en ligne!
la source
Gelée ,
76 octetsEssayez-le en ligne!
Comment?
la source
Ṛc’SƲƤ
ce qui pourrait être utile pour des séquences similaires.Python 3.6 , 61 octets
Essayez-le en ligne!
la source
brainfuck , 397 octets
Eh bien, c'était amusant!
Prend l'entrée ASCII (par exemple
11
), les sorties résultent en ASCII.Remarque: pour essayer ceci en ligne, assurez-vous de définir la taille de la cellule sur 32 bits (sur le côté droit de la page Web). Si vous n'entrez pas d'entrée, votre navigateur peut se bloquer.
L'interpréteur ne peut pas gérer les entrées de
11
et supérieures car il ne prend en charge que jusqu'à 32 bits.Essayez-le sur copy.sh
Explication
Obtenez une entrée décimale et ajoutez-en une (pour atténuer les coupures individuelles)
Générez des nombres de fibonacci sur la bande.
Configuration de la boucle de concaténation binaire entrante
Ainsi, les cellules contiennent la valeur, à partir de la première position,
Regardez ces cellules:
Je vais étiqueter ceci:
pow
est là pour trouver la puissance maximale de 2 strictement supérieure ànum
.sum
est la concaténation des nombres jusqu'à présent.cat
est la puissance de 2 que j'aurais besoin de multipliernum
pour concaténernum
devant lesum
(donc je pourrais simplement ajouter).Boucle: Vérifiez si
f_n
est strictement inférieur àpow
.Vérité:
Zéro indésirable. Ajoutez ensuite
num
*cat
àsum
. Ensuite, chargez le prochain numéro de Fibonacci (=f_(n-1)
; s'il n'existe pas, quittez la boucle) et réglezcat
surcat
*pow
. Préparez-vous à la prochaine boucle (éliminez plus de fichiers inutiles, modifiez la portée d'un).Falsey:
Réglez
pow
sur 2 *pow
, restaureznum
.Répétez jusqu'à ce qu'il ne reste plus de numéro de Fibonacci.
Déchets propres. Prenez chaque chiffre du nombre résultant et sortez-le chacun (en ascii).
la source
Coque , 7 octets
Essayez-le en ligne!
Explication
la source
Japt , 9 octets
Exécuter
Explication:
la source
Pyth, 22 octets
Essayez-le ici
Explication
la source
Perl 6 , 38 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) ,
7065585755 octetsEssayez-le en ligne!
la source
-0
à la fin pour enregistrer encore 2 octets.05AB1E , 6 octets
Essayez-le en ligne!
1 indexé.
la source
J, 36 octets
Explication:
la source
x86,
372221 octetsChangelog
bsr
. Merci Peter Cordes!-2 en mettant
mul
à zéro les registres avec .-1 en utilisant une boucle while au lieu de
loop
etpush
/pop
ecx
(crédit Peter Cordes).Entrée
edi
, sortieedx
.Objdump:
la source
lea
pour déplacer et ajouter dans fib2. De plus, il n'est pas nécessaire d'extraire chaque bit un par un. Utilisezbsr %eax, %ecx
pour trouver le nombre de bits dans la représentation binaire, et utilisez un décalage par CL / ou pour fusionner, comme le fait la réponse de Dennis en Python.cl
de décomptes, alors prenez votre compteur de boucles dans un registre différent (comme%edi
) et utilisezdec %edi / jnz
(3 octets en code 32 bits, 4 octets en 64 bits). En code 32 bits, cela permet d'économiser 1 octet au total en supprimant l'ecx push / pop. Ne tombez pas dans le piège de l'utilisationloop
lorsque cela rend le problème plus difficile, pas plus facile. (Votre convention d'appel est déjà personnalisée, claquante%ebx
, alors n'appelez pas votre fonctionmain
) Vous pourriez être en mesure de revenir dans EAX tout en profitant de 1 octetxchg
, pas besoin d'être non standard si vous n'en avez pas besoin.inc %ecx
du nombre de postes par un décalage supplémentaire vers la gauche au fur et à mesure de votre ajout, à l'aide delea (%eax, %edx, 2), %edx
. Neutre en octets pour 32 bits, enregistre un pour x86-64. Mais enregistre une instruction.loop
au code golf, je me sens sale. Enfin pas tout à fait, mais déçu de ne pas avoir pu trouver une implémentation aussi petite qui évitait cette instruction lente; en dehors du golf de code,loop
est l'une de mes bêtes noires . Je souhaite que ce soit rapide sur les processeurs modernes, car ce serait très bien pour les boucles de précision étendue sans décrochage partiel, mais ce n'est pas et devrait être considéré uniquement comme une instruction d'optimisation de taille obscure qui rend votre code lent.xor
/mul
trick à zéro trois registres (avez-vous déjà besoin d'autant de zéros?), Mais l'utiliser dans le cadre de la création d'un1
rend plus sensible.APL (Dyalog) ,
2622 octets4 octets enregistrés grâce à @ H.PWiz
Essayez-le en ligne!
la source
Haskell ,
897675 octetsVersion non-golfée:
la source
f=0:scanl(+)1f
(tiré d' ici ). Les fonctions peuvent être anonymes, vous pouvez donc supprimer l' interligneg=
, consultez notre Guide des règles de golf à Haskell .$realToFrac y
par.read.show$y
pour un octetPari / GP , 59 octets
Essayez-le en ligne!
la source
APL + WIN, 55 octets
Invite à saisir un entier à l'écran.
La précision d'entier maximale d'APL + WIN est de 17 et la limite d'entier est de l'ordre de 10E300 donc le nombre d'entrée maximum est de 55 et le résultat est: 1.2492739026634838E300
la source
Python 3 , 94 octets
Essayez-le en ligne!
la source
Gelée , 6 octets
Essayez-le en ligne!
Ḷ
gamme owered -> n èmeÆḞ
nombre ibonacci -> de déc àB
inaire ->F
latten -> deḄ
inary à decla source
10
, entrez et vous obtiendrez un16024033463
, il est incorrect (la bonne réponse est250375522
).10
retours250375522
MATL , 21 octets
Essayez-le en ligne!
Explication
la source
J , 25 octets
Essayez-le en ligne!
Explication
la source
Python 3 , 86 octets
Essayez-le en ligne!
la source
Ajouter ++ , 113 octets
Essayez-le en ligne!
la source
PHP, 124 octets
Essayez-le en ligne!
Donc , je cherchais un moyen de sortie numéros de fibonacci en utilisant la série, jusqu'à ce que je trouve ce . Il s'avère que vous pouvez calculer la série des fibonacci via l'arrondi, j'ai donc essayé le défi avec une fonction récursive.
J'ai trouvé l'approche de "l'arrondi" vraiment intéressante, aussi un professeur me l'a montré il y a quelque temps.
Code
Explication
Vérifiez également ce post stackoverflow la meilleure réponse se réfère au même article sur Wikipedia.
la source
Stax , 9 octets
Exécutez-le et déboguez-le sur staxlang.xyz!
Déballé (10 octets) et explication:
la source
Julia 0,6 , 65 octets
Essayez-le en ligne!
la source
Pyth, 27 octets
Suite de tests
Traduction Python 3:37 octetsSuite de tests
Traduction Python 3:la source
Rubis , 61 octets
Essayez-le en ligne!
la source
Jotlin , 59 octets
Programme de test
Il prend en charge jusqu'à 10, le changement
.i(2)
en.toLong(2)
prendrait en charge jusqu'à 14 si nécessairela source
Python 2, 88 octets
la source
R ,
244180179 octetsEssayez-le en ligne!
Enregistré quelques octets en concaténant des vecteurs numériques, pas des chaînes. Cas spécial sanglant pour 0!
la source
sapply
associée à un vecteur car elle est récursive. Il ne peut pas être tout enveloppé dans une seule ligne. Comme vous le voyez, le programme vous invite à saisir les informations de l'utilisateur, puis renvoie la réponse. Un octet peut être enregistré en créant un raccourci pourifelse
. Et ... nous pouvons retirer,""
descan
, oui.