Définissons une séquence d'entiers positifs. Nous définirons la séquence des nombres pairs comme étant le double du terme précédent. Les indices impairs de la séquence seront le plus petit entier positif n'apparaissant pas encore dans la séquence.
Voici les premiers termes du couple.
1,2,3,6,4,8,5,10,7,14,9,18,11,22,12,24,13,26,15,30
Vous pouvez également y voir la liste des paires concaténées (n, 2n) où n est l'entier positif le moins utilisé jusqu'à présent.
Tâche
Étant donné un nombre n en entrée, calculer le n ème terme dans cette séquence.
Il s'agit de code-golf , vous devez donc viser à minimiser la taille de votre code source, mesurée en octets.
(n,2n)
et que chaque nombre n'apparaît qu'une seule fois. Chaque paire est choisie pour être la plus petite possible tout en respectant cette dernière contrainte.Réponses:
Haskell, 40 octets
Base zéro.
l
construit progressivement la séquence à partir d'une liste paresseuse d'entiers restants.la source
JavaScript (ES6),
9282696765 octetsComment?
Nous suivons:
En interne, nous utilisons un index basé sur 0 i . Les comportements impairs et pairs sont donc inversés:
Aux positions impaires, la valeur suivante est simplement
2 * b
.Aux positions paires, nous utilisons la fonction récursive g () et la table de recherche a pour identifier la plus petite valeur correspondante:
Pour économiser quelques octets, i est initialisé à
{}
plutôt qu'à0
. Cela nous oblige à utiliser:i^n
pour comparer i avec n parce({}) ^ n === n
que alors({}) - n
évalue àNaN
.-~i
incrémenter i , car({}) + 1
générerait une chaîne.Démo
Afficher l'extrait de code
la source
Python 3 ,
807269 octets-7 octets grâce à M. Xcoder !
Essayez-le en ligne!
la source
set(...)
par `{* ...} pour 78 octets{*...}
place deset(...)
.{...for...in...}
ce serait plus d'adieux.True
pour 1)Gelée , 15 octets
Essayez-le en ligne!
la source
Mathématiques ,
5653 octets-3 octets merci JungHwan Min !
Essayez-le en ligne!
Basé sur l'expression Mathematica donnée dans le lien OEIS.
la source
Nest[k=0;If[#~FreeQ~++k,#~Join~{k,2k},#]&,{},#][[#]]&
PHP , 64 octets
Essayez-le en ligne!
PHP , 77 octets
Essayez-le en ligne!
PHP , 78 octets
Essayez-le en ligne!
la source
PHP, 56 octets
PHP,
7572 octetsEssayez-le en ligne
la source
05AB1E ,
161514 octets1 indexé.
Utilise le fait que la représentation binaire d'éléments à des indices impairs dans la séquence se termine par un nombre pair de zéros: A003159 .
Essayez-le en ligne!
Explication
la source
Python 2 ,
595149 octetsEssayez-le en ligne!
Contexte
Chaque n entier positif peut être exprimé uniquement comme n = 2 o (n) c (n) , où c (n) est impair.
Laissez ⟨a n ⟩ n> 0 être la séquence de la spécification de défi.
Nous affirmons que, pour tous les entiers positifs , n , o (a 2n-1 ) est pair. Puisque o (a 2n ) = o (2a 2n-1 ) = o (a 2n-1 ) + 1 , cela revient à affirmer que o (a 2n ) est toujours impair.
Supposons que la réclamation soit fausse et que 2m-1 soit le premier indice impair de la séquence tel que o (a 2m-1 ) soit impair. Notez que cela fait de 2m le premier indice pair de la séquence tel que o (a 2m-1 ) est pair.
o (un 2m-1 ) est impair et 0 est pair, donc un 2m-1 est divisible par 2 . Par définition, un 2 m-1 est le plus petit entier positif ne figurant pas encore dans la séquence , ce qui signifie que d' un 2 m-1 /2 doit avoir comparu devant. Soit k soit le (premier) indice d' un 2m-1 / deux en un .
Puisque o (a k ) = o (a 2m-1 /2) = o (a 2m-1 ) - 1 est pair, la minimalité de n implique que k est impair. À son tour, cela signifie que un k + 1 = 2a k = a 2m-1 , en contradiction avec la définition d' un 2m-1 .
Comment ça marche
encore à venir
la source
R ,
706965 octetsEssayez-le en ligne!
Une fonction anonyme qui prend un argument.
F
par défaut àFALSE
ou de0
sorte que l'algorithme évalue correctement qu'aucun entier positif ne se trouve encore dans la séquence.L'algorithme génère les paires dans une
for
boucle de la manière suivante (oùi
va de2
à2n
by2
):la source
Haskell , 63 octets
Essayez-le en ligne!
Celui-ci abuse au maximum de l'évaluation paresseuse de Haskell.
la source
Perl 6 , 50 octets
Essayez-le en ligne!
1, { ... } ... *
est une séquence infinie générée paresseusement où chaque terme après le premier est fourni par le bloc de code délimité par des accolades. Étant donné que le bloc fait référence à la@_
tableau, il reçoit la séquence actuelle entière dans ce tableau.@_ % 2
), nous générons un élément même indexé, de sorte que l'élément suivant est le double du dernier élément que nous avons jusqu'à présent:2 * @_[*-1]
.first * ∉ @_, 1..*
.$_
est l'argument de la fonction externe. Il indexe dans la séquence infinie, donnant la valeur de retour de la fonction.la source
Mathematica, 82 octets
Essayez-le en ligne!
la source
k , 27 octets
1 indexé. Essayez-le en ligne!
Utiliser
(!y)^x
au lieu de&^x?!y
travaux aussi.la source
C # (compilateur interactif Visual C #) , 82 octets
Essayez-le en ligne!
-6 octets grâce à @ASCIIOnly!
la source
:
s sont nécessaires car ce sera le plus grand nombre de la liste2.0
=>2f
Clojure, 102 octets
Itère les
n
temps pour construire la séquence et retourne len
e élément, indexé 1.la source
Rubis, 60 octets
0 indexé. Nous bouclons les
n/2+1
temps, générant deux valeurs à chaque fois et les stockant en remplissant un tableau à leurs indices.v+v*n%2
donne la sortie, que ce soitv
ou env*2
fonction de la paritén
.la source
Rubis , 49 octets
Commencez par [0], ajoutez des paires au tableau jusqu'à ce que nous ayons au moins n + 1 éléments, puis prenez le n + 1th (basé sur 1)
Essayez-le en ligne!
la source
JavaScript (ES6), 60
65octetsUne solution itérative.
Moins golfé
Tester
la source
Gelée ,
131210 octetsCela utilise l'observation de ma réponse Python .
Essayez-le en ligne!
Comment ça marche
la source