Disons qu'une sous-chaîne est une section continue d'une chaîne d'origine. Par exemple, cat
est une sous-chaîne de concatenate
. Nous dirons qu'une sous-chaîne correcte est une sous-chaîne qui n'est pas égale à la chaîne d'origine. Par exemple, concatenate
est une sous-chaîne concatenate
mais pas une sous-chaîne appropriée. (les chaînes de caractères uniques n'ont pas de sous-chaînes appropriées)
Nous allons maintenant définir une séquence en utilisant ces termes. Le n ième terme de cette séquence sera le plus petit nombre de sorte qu'il existe une sous-chaîne appropriée de sa représentation binaire qui n'est pas une sous-chaîne d'un terme antérieur de la séquence. Le premier terme est 10
.
Comme un exercice permet de générer les 5 premiers termes. Je vais travailler en binaire pour faciliter les choses.
Le premier terme est 10
. Puisque 11
, le plus petit nombre suivant, n'a qu'une seule sous-chaîne appropriée, 1
qui est également une sous-chaîne de 10
, 11
n'est pas dans la séquence. 100
contient cependant la sous-chaîne appropriée 00
qui n'est pas une sous-chaîne de 10
sorte 100
est notre prochain terme. Ensuite, 101
qui contient la sous-chaîne appropriée unique en l' 01
ajoutant à la séquence, puis 110
contient la sous-chaîne appropriée 11
qui est nouvelle en l'ajoutant à la séquence.
Maintenant nous avons
10, 100, 101, 110
111
est à côté, mais il ne contient que les sous-chaînes 1
et 11
n'en fait pas un terme. 1000
contient cependant l' 000
ajouter à la séquence.
Voici les premiers termes du couple en décimal
2, 4, 5, 6, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 54, 56, 58
Tâche
Soit
Prenez n en entrée et générez le n ème terme dans cette séquence (soit 0 soit 1 indexé)
Sortie en continu des termes de la séquence
Il s'agit du code-golf, les réponses sont notées en octets, moins les octets étant meilleurs.
n
)?a(36)
est 47 (1 indexé).Réponses:
Python 3 ,
88807875 octets-6 octets grâce à Wheat Wizard
-2 octets grâce à RootTwo
-3 octets grâce à notjagan
Essayez-le en ligne!
la source
bin(n)[2:]
parf"{n:b}"
.Gelée , 22 octets
Essayez-le en ligne!
la source
Mathematica,
116110 octetsÉmet à l'infini les termes de la séquence.
Explication
x
est la liste des termes de la séquence jusqu'à présent.f
est unFunction
qui prend un entier et retourne touteSubsequences
sa2
représentation de base (y compris la liste vide{}
et la liste complète deIntegerDigits
lui - même).Évaluez la
...
valeur den
à2
à∞
.Si
...
estFalse
, alors le deuxième argument deAnd
(&&
) n'est jamais évalué. Si...
estTrue
, puisEcho@n
imprime et renvoien
, dont nous avons ensuiteAppendTo
la listex
.Nous voulons vérifier qu'une sous-chaîne correcte de
n
n'est pas une sous-chaîne d'un terme précédent dans la séquence.Most@f@n
est la liste des sous-chaînes propres àn
, on vérifie ensuite s'il y a des sous-chaîness_
qui font partieMemberQ
de cette liste de telle sorte que la listef/@x
des listes de sous-chaînes des termes précédents de la séquence soitFreeQ
des
niveau2
.la source
Mathematica,
10994 octetsSortie en continu des termes de la séquence
Remerciements spéciaux à @ngenisis pour -15 octets
Mathematica, 123 octets
Prenez n en entrée et générez le nième terme dans cette séquence (1 indexé)
contribution
production
la source
15
octets qui peuvent aller:SubsetQ
est plus court que et équivalent àContainsAll
, vous pouvez utiliser à laAnd
place deIf
,Union
c'est inutile, etDo
est presque toujours plus court queFor
:s={};Do[!SubsetQ[s,(t=Subsequences@IntegerDigits[i,2])[[2;;-2]]]&&(s=s~Join~t;Echo@i),{i,∞}]
3
plus d'octets en utilisantMost
:s={};Do[!SubsetQ[s,Most[t=Subsequences@IntegerDigits[i,2]]]&&(s=s~Join~t;Echo@i),{i,2,∞}]
Pyth , 20 octets
Cela imprime la séquence à l'infini. Il ne peut donc être utilisé que hors ligne.
Explication (L'espace est une nouvelle ligne):
la source
Pyth , 20 octets
Essayez-le en ligne!
la source
Haskell,
172 octetsEssayez-le en ligne.
Explication
Le code génère la séquence en continu.
b
renvoie la représentation binaire d'un enInt
tant queString
s
renvoie toutes les sous-chaînes d'une chaînep
renvoie toutes les sous-chaînes appropriées d'une chaînen
est une fonction qui est appliquée de manière itérative et renvoie un tuple contenant:scanl
est utilisé pour appelern
encore et encore et sa sortie est filtrée pour ne contenir que des éléments supérieurs à 1Voici une version légèrement plus lisible, avant de jouer au golf:
la source
JavaScript, 57 octets
Afficher l'extrait de code
Écrivons le nombre donné n sous forme binaire, puis:
10
, n doit dans l'ordre:1
, la chaîne binaire restante ne doit pas être vue, car n est le plus petit nombre pouvant contenir une telle chaîne11
:1
, la chaîne binaire restante (laissez-nous la donner comme il1x
faut le voir puisque:1x
est dans la séquence, ou1x0
est dans la séquence, car il contient une sous-chaîne unique1x
Conclusion:
la forme binaire du nombre commence par
10
ou se termine par1
suivie d'un nombre impair de0
. Ou décrivez dans regex: x match/^10|10(00)*$/
.la source