La séquence contient la représentation décimale des nombres binaires de la forme:, 10101...
où le nième terme a n bits.
La séquence est probablement plus facile à expliquer en montrant simplement les relations entre les représentations binaires et décimales des nombres:
0 -> 0
1 -> 1
10 -> 2
101 -> 5
1010 -> 10
10101 -> 21
101010 -> 42
Défi:
Prenez un entier en entrée n
et renvoyez les n premiers nombres de la séquence. Vous pouvez choisir d'avoir la séquence indexée 0 ou 1 indexée.
Cas de test:
n = 1 <- 1-indexed
0
n = 18
0, 1, 2, 5, 10, 21, 42, 85, 170, 341, 682, 1365, 2730, 5461, 10922, 21845, 43690, 87381
Les explications sont encouragées, comme toujours.
Il s'agit d' OEIS A000975 .
[85,[42,[21,[10,[5,[2,[1,0]]]]]]]
?Réponses:
Python 2 , 36 octets
Essayez-le en ligne! Explication: La représentation binaire de estdonc qu'il reste simplement à le multiplier par une puissance appropriée de 2 et à prendre la partie entière.23
0.101010101...
la source
05AB1E , 4 octets
2 octets enregistrés en utilisant l'astuce 2/3 de Neil
Essayez-le en ligne!
Explication
05AB1E , 6 octets
Essayez-le en ligne!
Explication
la source
Gelée ,
...4 octetsMerci des miles pour -1 octet!
Essayez-le en ligne!
Explication:
Gelée , 4 octets
Version de Jonathan Allan.
Essayez-le en ligne!
Une version basée sur l'astuce 2/3 de Neil donne 5 octets, voir l'historique des révisions.
la source
ḶḂḄƤ
préfixe rapide a été fait pour celaḶ€ḂḄ
cela fonctionnerait également.MATL , 5 octets
Basé sur la réponse de Neil .
Explication
Essayez-le en ligne!
MATL , 9 octets
Essayez-le en ligne!
Explication
la source
Python 2 ,
453736 octets-3 octets grâce à user202729
-1 octet grâce à mathmandan
Essayez-le en ligne!
la source
s
fait de doubler équivaut à s'ajouters
à lui-même, donc je pense que vous pourriez faires+=s+~s%2
pour enregistrer un octet.Python 3,
6861544843 octetsMerci à user202729 pour avoir aidé à économiser 19 octets et ovs pour avoir aidé à économiser 6 octets.
Essayez-le en ligne
la source
x == 0
est équivalent ànot x
ifx
est un entier, permutez les opérandes (c'est-à-direx if c else y
=y if not c else x
) pour économiser encore plus d'octets.i%2
et utiliser à la1-r%2
placei
.Coque , 7 octets
Essayez-le en ligne!
Basé sur 1, donc l'entrée n donne les n premiers résultats.
Explication
la source
APL (Dyalog Unicode) , SBCS de 11 octets
Suppose que
⎕IO
( I ndex O rigin) est0
, ce qui est le cas par défaut sur de nombreux systèmes. Fonction de préfixe tacite anonyme. 1 indexé.Essayez-le en ligne!
⍳
ɩ ndices 0… n − 1(
…)¨
Appliquer la fonction tacite suivante à chacun⍴∘1 0
remodeler cycliquement la liste[1,0]
à cette longueur2⊥
convertir de base-2 (binaire) en nombre normalla source
Perl
v5.10
-n
, 24 + 1 octets-3 octets grâce à Nahuel Fouilleul !
Essayez-le en ligne!
Même logique que ma version Ruby, mais plus courte car perl est plus concis. Pour une raison étrange,
print
je ne ferais pas de séparateur (bon sang!), Donc j'ai dû utilisersay
fromv5.10;
pour que cela fonctionne, je ne sais pas comment marquer cela, donc je le laisse pour le moment?. ..Explication
la source
-n
) = 28 octets, car pour exécuter un perl one-liner, il faut utiliser-e
et pour utiliser 5.10 il vous suffit d'utiliser-E
, qui est de la même longueur$|--
au lieu de($.^=1)
Haskell , 33 octets
Essayez-le en ligne!
la source
APL (Dyalog) , 7 octets
Essayez-le en ligne!
APL (Dyalog) , 11 octets
Essayez-le en ligne!
Utilisations
⎕IO←0
.la source
⎕IO←0
(mais prétendez qu'il est indexé 1!) Et changez0,
pour1+
:(2⊥2|⍳)¨1+⍳
C ,
81 5559 octets1 indexé.
Programme complet, moins golfé:
Essayez-le en ligne!
EDIT 2: J'étais sous l'hypothèse que les fonctions n'avaient pas besoin d'être réutilisables maintenant que j'y pense, il est parfaitement logique qu'elles devraient être réutilisables: P
EDIT: Je pensais à tort que je devais inclure l'ensemble du programme dans la réponse, il s'avère que je n'avais besoin que de la fonction qui le fait. C'est bien.
Je suis décemment sûr de pouvoir raser quelques octets ici et là. J'ai déjà utilisé quelques astuces. Une grande partie du programme est dédiée à obtenir l'argument et à le transformer en un int. Ceci est mon premier golf de code. Si je fais quelque chose de mal, dites-moi: P
la source
i++
et en le changeanti&1
eni++&1
. De plus, bien qu'en tant que variables globalesi
etj
initialisées à zéro initialement, elles doivent être initialisées à l'intérieur de la fonction, car les soumissions de fonctions doivent être réutilisables .i,j;f(c){for(i=j=0;i<c;)printf("%d ",j+=j+i++%2);}
essayez-le en ligne!Haskell ,
47405349444034 octets-4 octets grâce à user202729
-6 octets grâce à Laikoni
Essayez-le en ligne!
la source
otherwise
par exemple1>0
(otherwise == True
)Rubis , 26 octets
Essayez-le en ligne!
Bat toutes les réponses rubis plus anciennes.
Explication
1/3
en binaire ressemble0.01010101...
, donc si vous le multipliez par des puissances de deux, vous obtenez:Mais Ruby fixe les nombres sur la division int, me donnant la séquence dont j'ai besoin.
la source
J , 9 octets
Comment ça marche?
i.
- liste 0..n-12|
- les éléments de la liste mod 2\
- tous les préfixes#.
- en décimal[:
- coiffe la fourche (comme j'ai un nombre pair (4) de verbes)Essayez-le en ligne!
la source
Rétine , 28 octets
Essayez-le en ligne!
Basé sur 0, donc l'entrée n donne le premier n + 1 résultats.
Explication
Utilise la récursivité d'OEIS:
Passons en revue le programme:
Il s'agit d'une étape constante: elle supprime l'entrée et définit la chaîne de travail sur
0
, la valeur initiale de la séquence. L')
encapsule cette étape dans un groupe. Ce groupe lui-même ne fait rien, mais presque chaque étape (y compris les étapes de groupe) enregistre son résultat dans un journal, et nous aurons besoin de deux copies de0
ce journal pour que le programme fonctionne.Il y a un tas de configuration ici:
"$+"+
enveloppe la scène en boucle. Le"$+"
est traité comme une substitution et$+
fait référence à l'entrée du programme, c'est-à-dire n . Cela signifie que la boucle est exécutée n fois.¶<
Enveloppe ensuite chaque itération dans une étape de sortie, qui imprime entrée de avec un saut de ligne de fin (donc la première itération imprime le zéro, la deuxième itération imprime le résultat de la première itération et ainsi de suite).L'étape elle-même remplace la chaîne de travail entière par la substitution sur la dernière ligne. Celui-ci utilise une parenthèse de fermeture implicite et des arguments implicites pour l'opérateur de répétition
*
, il est donc en fait court pour:Le contenu entre parenthèses peut être divisé en trois parties:
$&*_
: donne une chaîne de a (n-1)_
s._
: donne un single_
.2*$-1*_
: donne une chaîne de 2 * a (n-1)_
. Le$-1
fait référence à l'avant-dernier résultat dans le journal des résultats, c'est-à-dire l'itération de boucle avant le dernier. C'est pourquoi nous avions besoin de copies du zéro sur le journal pour commencer, sinon cela ferait référence à l'entrée du programme lors de la première itération.$.(…)
Mesure ensuite la longueur de la chaîne résultante. En d'autres termes, nous avons calculéa(n) = a(n-1) + 1 + 2*a(n-2)
en passant par unaire (pas vraiment cependant:$.(…)
est paresseux et n'évalue pas réellement son contenu s'il peut déterminer la longueur résultante directement par arithmétique, donc c'est même assez efficace).Le résultat de l'itération finale de la boucle (le n + 1 ème élément de la séquence) est imprimé en raison de la sortie implicite de Retina à la fin du programme.
la source
Brain-Flak , 36 octets
Essayez-le en ligne!
Explication:
Le nombre suivant de la séquence est obtenu par
n*2+1
oun*2+0
.la source
Rubis
42 41 43 41 37 35 31 3330 octets-2 octets grâce à Unihedron
-3 octets grâce à GB
Essayez-le en ligne!
la source
->x{a=0;x.times{a-=~a+p(a)%2}}
> <> , 22 + 3 (-v flag) octets
Essayez-le en ligne!
Explication
La pile est initialisée avec le compteur de boucles.
la source
Java 8,
115818052 octetsRéponse de Port of @Neil Python 2 .
1 indexé et sorti directement, chaque valeur sur une ligne séparée.
Explication:
Essayez-le en ligne.
Ancienne réponse de 80 octets:
Entrée indexée 1 et
String
sortie délimitée par des espacesExplication:
Essayez-le en ligne.
la source
Perl 6 ,
35 30 27 2520 octetsEssayez-le (35)
Essayez-le (30)
Essayez-le (30)
Essayez-le (27)
Essayez-le (25)
Essayez-le (20)
Étendu:
la source
Python 2 , 33 octets
Essayez-le en ligne!
Python 2 , 34 octets
Essayez-le en ligne!
Retourne dans l'ordre inverse.
la source
C,
4746 octetsL'accumulateur
a
commence par zéro. À chaque étape, nous le doublons (a+=a
) et en ajoutons un si le bit le moins significatif précédent était zéro (!(a%2)
, ou de manière équivalente,-(~a)%2
).Programme de test
Résultats
la source
Japt ,
10976 octetsTous dérivent indépendamment d'autres solutions.
1 indexé.
L'essayer
Explication
L'essayer
Version 7 octets
L'essayer
Version 9 octets
L'essayer
la source
Haskell , 52 octets
Essayez-le en ligne!
la source
MATL , 7 octets
Essayez-le en ligne!
Explication:
La sortie serait
0, 1, 2, 5 ...
if aP
été ajoutée à end (flip
), ce qui en fait 8 octets.la source
&+
Rubis
-n
,3230 + 1 octetsPuisque nous avons exactement 1 ligne d'entrée,
$.
c'est très pratique!EDIT: Je suis étonné d'avoir réussi à me surpasser, mais il semble que l'utilisation
-n
qui compte comme 1 (par la règle 2 dans les conditions spéciales par défaut , car Ruby peut être exécutée avecruby -e 'full program'
(donc-n
1) toutes les instancesgets
qui ne sont utilisées qu'une seule fois peut être joué au golf 1 caractère de cette façon; je crois que c'est une étape importante pour le rubis, veuillez vous exprimer si vous n'êtes pas d'accord avec ce courant de pensée avant de le réutiliser à plusieurs reprises à l'avenir)Essayez-le en ligne!
Explication
la source
AWK
a=0
, 31 octetsEssayez-le en ligne!
Utilise la formule sans vergogne volée de cette autre réponse Ruby.
Bien que ne pas avoir
a=0
fonctionnerait (awk traite "vide" comme 0), le premier élément de 0 ne sera pas imprimé et sera plutôt uneempty
ligne, ce qui, bien que je dirais, est qu'une sortie valide ne passera probablement pas, donc il y aa=0
qui peut être inséré comme argument de ligne de commande.la source
C, 52 octets
1 indexé
Essayez-le en ligne!
la source
brainfuck , 40 octets
Essayez-le en ligne!
0 indexé. Entrée en tant que code de caractère, sortie en tant qu'unaire avec des octets nuls séparant les séries de code de caractère 1s. Suppose des cellules 8 bits, sauf si vous souhaitez entrer plus de 255. Suppose des cellules négatives, bien que cela puisse être corrigé au détriment de plusieurs octets.
Auparavant, 50 octets
Essayez-le en ligne!
Entrées sous forme de code char, sorties sous forme de code char. 1 indexé. On pourrait probablement jouer un peu au golf.
@Unihedron souligne que j'ai oublié de spécifier que cela nécessite des cellules de taille infinie, sinon il arrive en tête au 8e nombre.
la source