Un entier positif N est K -sparse s'il y a au moins K 0 entre deux quelconques 1 consécutifs dans sa représentation binaire.
Ainsi, le nombre 1010101 est 1-clairsemé alors que 101101 ne l'est pas.
Votre tâche consiste à trouver le prochain numéro 1-sparse pour le numéro d'entrée donné. Par exemple, si l'entrée est 12 ( 0b1100
), la sortie doit être 16 ( 0b10000
) et si l'entrée est 18 ( 0b10010
), la sortie doit être 20 ( 0b10100
).
Le plus petit programme ou fonction (en octets) gagne! Failles standard interdites.
code-golf
number
arithmetic
base-conversion
binary
articuno
la source
la source
Réponses:
Pyth, 9 octets
x & (x*2) != 0
algorithme de @alephalphaMa première tentative sur Pyth:
Essayez-le ici
la source
CJam,
1411 octets3 octets économisés grâce à DigitalTrauma.
Testez-le ici.
Explication
Cela laisse le dernier numéro sur la pile qui est imprimé automatiquement à la fin du programme.
la source
Python 2, 44 octets
Il s'agit d'un programme python complet qui lit en n et imprime la réponse. Je pense que cela fonctionne très bien dans la sous-compétition de lisibilité.
Les résultats des tests:
la source
Pyth,
1211 octetsEssayez-le en ligne: Pyth Compiler / Executor .
la source
"11"
en`11
.Mathematica,
4130 octetsSauvegardé 11 octets grâce à Martin Büttner.
la source
Perl, 31
Ou depuis la ligne de commande:
la source
APL, 18 octets
Cela équivaut à une fonction monadique. Essayez-le ici. Usage:
Explication
la source
J, 20 caractères
Un verbe monadique. Correction d'obéir aux règles.
Explication
D'abord, c'est le verbe avec des espaces puis un peu moins golfé:
Lis:
Je calcule essentiellement si
1 1
se produit dans la représentation de base 2 de l'entrée. Si c'est le cas, j'incrémente l'entrée. Ceci est placé sous une limite de puissance, ce qui signifie qu'il est appliqué jusqu'à ce que le résultat ne change plus.la source
{⍵+∨/2∧/⍵⊤⍨⍵⍴2}⍣=
.Javascript,
2519En utilisant le fait que, pour un nombre binaire 1-clairsemée,
x&2*x == 0
:la source
JavaScript (ES6), 39
43Pas d'expression régulière, pas de chaînes, récursif:
Version itérative:
C'est très simple, il suffit d'utiliser le décalage vers la droite pour trouver une séquence de 11. Lorsque je la trouve, passez au numéro suivant. La version récursive est directement dérivée de la version itérative.
Non golfé et plus évident. Pour jouer au golf, la partie la plus délicate est de fusionner les boucles intérieure et extérieure (avoir à initier x à 3 au début)
la source
%4>2
ressemble à de la sorcellerie de la théorie des nombres, pouvez-vous s'il vous plaît expliquer || fournir un lien?Python 2, 37 octets
Utilisé la logique
x & 2*x == 0
pour un nombre à 1 fragment.Merci à @Nick et @CarpetPython.
la source
JavaScript,
756662 octetsMerci à Martin Büttner pour avoir économisé 9 octets et Pietu1998 pour 4 octets!
Comment ça marche: il exécute une
for
boucle à partir dua + 1
moment où le nombre actuel n'est pas 1-sparse, et si c'est le cas, la boucle est interrompue et il retourne le nombre actuel. Pour vérifier si un nombre est 1-sparse, il le convertit en binaire et vérifie s'il ne contient pas11
.Code non golfé:
la source
Julia, 40 octets
Cela crée une fonction anonyme qui accepte un seul entier en entrée et retourne le prochain entier à 1 segment le plus élevé. Pour l'appeler, donnez-lui un nom, par exemple
f=n->...
, et faitesf(12)
.Non golfé + explication:
Exemples:
Les suggestions et / ou questions sont les bienvenues comme toujours!
la source
> <> (Poisson) , 31 + 3 = 34 octets
Usage:
3 octets ajoutés pour le
-v
drapeau.la source
JavaScript (ECMAScript 6), 40
Par récursivité:
JavaScript, 56
Idem sans fonctions fléchées.
la source
Scala, 65 octets
(si une fonction nommée est requise, la solution sera de 69 octets)
la source
Python,
3933 octetsEssayez-le ici: http://repl.it/gpu/2
Sous forme lambda (merci à xnor pour le golf):
La syntaxe de fonction standard
s'est avérée être plus courte qu'une lambda pour une fois!la source
f=lambda x:1+x&x/2and f(x+1)or-~x
. Il s'avère que vous décalez les bits vers la droite plutôt que vers la gauche, vous pouvez utiliser à lax/2
place de(x+1)/2
car la différence est toujours en zéro bit dex+1
. La spécification demande cependant un programme.Java, 33 octets.
Utilise la méthode dans cette réponse
TIO
la source
Rubis, 44
Assez basique. Un lambda avec une boucle infinie et une expression rationnelle pour tester la représentation binaire. Je souhaite que
loop
cédé et numéro d'index.la source
Matlab (
7774 octets)Remarques:
m+1
à2*m
, oùm
est l'entrée.~any(x)
esttrue
six
contient tous les zéros ou six
est videla source
C (32 octets)
Implémentation récursive du même algorithme que tant d'autres réponses.
la source
Perl, 16 octets
Combiner les
x&2*x
différentes réponses (je pense que la première de Nick ) avec lesredo
rendements de nutki :Testé dans Strawberry 5.26.
la source
Japt, 8 octets
Exécutez-le en ligne.
la source
Gelée , 7 octets
Un programme complet acceptant un seul entier non négatif qui imprime un entier positif (en tant que lien monadique, il donne une liste contenant un seul entier positif).
Essayez-le en ligne!
Comment?
En commençant par
v=n+1
, et en incrémentant, doublezv
pour déplacer chaque bit vers le haut à un endroit et bit par bit ET avecv
, puis effectuez une opération logique NON pour tester s'ilv
est à 1 fragment jusqu'à ce qu'un de ces nombres soit trouvé.la source
Stax , 5 octets
Exécuter et déboguer
Cela fonctionne en utilisant cette procédure. L'entrée commence au sommet de la pile.
la source