Contribution
L'entrée est un seul entier positif n
Sortie
La sortie est n
avec son bit le plus significatif réglé sur 0
.
Cas de test
1 -> 0
2 -> 0
10 -> 2
16 -> 0
100 -> 36
267 -> 11
350 -> 94
500 -> 244
Par exemple: 350
en binaire est 101011110
. Définir son bit le plus significatif (c'est-à-dire le 1
bit le plus à gauche ) pour le 0
transformer en 001011110
ce qui équivaut à l'entier décimal 94
, la sortie. Il s'agit d' OEIS A053645 .
10
donne évidemment0
: DRéponses:
C (gcc) ,
49444039 octetsEssayez-le en ligne!
la source
i<=n
parn/i
pour -1 octet. Ce n'est pas mon golf, quelqu'un d'autre a essayé de le modifier dans votre message, mais je l'ai annulé, car les modifications apportées aux articles de golf ne sont pas acceptées conformément aux règles de notre communauté.Python 2 , 27 octets
Essayez-le en ligne!
26 octets
Malheureusement, cela ne fonctionne pas pour
1
:Essayez-le en ligne!
la source
05AB1E , 5 octets
Essayez-le en ligne!
Retrait du bit le plus significatif d'un nombre entier N est équivalent à trouver la distance à partir de N à la puissance la plus élevée entier de 2 inférieur à N .
Ainsi, j'ai utilisé la formule N - 2 étage (log 2 N) :
.²
- Logarithme avec base 2 .ó
- Plancher à un entier.o
- 2 élevés à la puissance du résultat ci-dessus.-
- Différence.la source
b¦C
fonctionne aussi ... n'est-ce pas? Convertir en binaire, MSB est toujours à l'index 1, supprimer MSB, reconvertir.1
!Gelée , 3 octets
Essayez-le en ligne!
Explication
la source
Ḅ
etḊ
codepoints deux octets? Cela changerait la taille globale à 5 octets.C (gcc) - 59 octets
Cette réponse gcc utilise uniquement des opérations binaires et arithmétiques entières. Pas de logarithmes ici! Il peut avoir des problèmes avec une entrée de 0 et est totalement non portable.
C'est ma première réponse sur ce site, j'aimerais donc avoir des commentaires et des améliorations. Je me suis bien amusé à apprendre des expressions au niveau du bit.
la source
main
, une fonction est une soumission valide . Changer cela en une fonction et prendre l'entrée comme argument pour cette fonction économise 18 octets .MATL ,
86 octetsEssayez-le en ligne!
Enregistré deux octets grâce à Cinaski. Le passage à l'indexation d'affectation au lieu de l'indexation de référence était plus court de 2 octets :)
Explication:
la source
4L
plutôt que[2J]
. Un autre plaisir 6 octets:tZlcW-
(ne fonctionne que dans MATLAB, pas dans TIO / Octave)Java (OpenJDK 8) , 23 octets
Essayez-le en ligne!
Désolé, intégré: - /
la source
n->n^1<<(int)Math.log2(n)
fonctionnera et est probablement plus court que 38 octets. C'était ma deuxième idée (encore non testée), si celle-highestOneBit
ci ne fonctionnait pas correctement. Par curiosité, quelle a été votre solutionn->n^1<<(int)(Math.log(n)/Math.log(2))
parce qu'ilMath.log2
n'existe pas en Java. ; P seulementMath.log
,Math.log10
etMath.loglp
sont disponibles.Math.log2
n'existe pas vraiment ... Mon mauvais. Voir? Une belle méthode (highestOneBit
) existe mais pas une autre (Math.log2
). Java est bizarre ;-)Husk , 3 octets
Essayez-le en ligne!
Explication:
la source
Ohm v2 , 3 octets
Essayez-le en ligne!
la source
Python 2 , 27 octets
Essayez-le en ligne!
Explication
la source
2**len(bin(n))/8
peut également être orthographié1<<len(bin(n))-3
, puis il fonctionnera à la fois en 2 et 3 (aucun octet enregistré / ajouté).Python 3 , 30 octets
-8 octets grâce à caird coinheringaahing. Je l'ai tapé de mémoire. : o
Essayez-le en ligne!
la source
lambda n:int(bin(n)[3:],2)
?Mathematica, 37 octets
Essayez-le en ligne!
la source
JavaScript,
2220 octetsSauvegardé 2 octets grâce aux ovs
Essayez-le en ligne!
Une autre approche, 32 octets
Essayez-le en ligne!
la source
.slice`1`^0
quand.slice(1)^0
travaillerait aussi bien, hahaJ, 6 octets
Assez simple.
Explication
la source
APL (Dyalog) , 10 octets
Fonction de préfixe tacite.
Essayez-le en ligne!
2∘⊥
... décodage de base 2 ......
⍣¯1
temps d'une négative (c. -à- codage en base 2)1↓
déposez le premier bit2⊥
décoder à partir de la base-2la source
Rubis, 26 octets
-7 octets grâce à Ventero. -2 octets grâce à l'historicrat.
la source
->n{n.to_s(2)[1..-1].to_i 2}
->n{/./=~'%b'%n;$'.to_i 2}
C (gcc), 38 octets
Intégré dans gcc utilisé.
la source
31-
par~
devrait économiser deux octets.Ensemble ARM,
4643 octets(Vous pouvez omettre le registre de destination lors de l'ajout lorsqu'il est identique à la source)
la source
shr
/shl
/ret
et veut plutôt quelque chose commelsr
/lsl
/bx lr
.Pyth, 5 octets
Suite de tests.
Explication:
la source
Alice , 8 octets
Essayez-le en ligne!
Explication
la source
Japt , 6 octets
Essayez-le en ligne!
Explication
Si l'entrée
1
peut échouer: 4 octetsEssayez-le en ligne!
Explication : récupérez l'entrée binary (
¢
), coupez le premier char (Å
), analysez le binaire en retour à un nombre (n2
).la source
Octave , 20 octets
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 9 octets
Essayez-le en ligne!
-1 octet grâce à Adam
la source
⊢-2*∘⌊2⍟⊢
enregistre un octet.CJam , 7 octets
Essayez-le en ligne!
Explication:
Réutilisez le MSB (qui est toujours 1) pour éviter d'avoir à le supprimer; l'équivalent sans cette astuce serait
{2b1>2b}
ou{2b(;2b}
.la source
Rétine ,
1513 octetsEssayez-le en ligne!
Entrée et sortie en unaire (la suite de tests comprend la conversion de et vers décimal pour plus de commodité).
Explication
C'est assez facile à faire en unaire. Tout ce que nous voulons faire, c'est supprimer la plus grande puissance de 2 de l'entrée. Nous pouvons associer une puissance de 2 à quelques références avancées. Il est en fait plus facile de faire correspondre les valeurs du formulaire 2 n -1 , nous allons donc le faire et faire correspondre un 1 séparément:
Le groupe
1
correspond soit à un simple1
au début pour lancer les choses, soit il correspond à deux fois ce qu'il a fait lors de la dernière itération. Donc ça correspond1
, alors2
, puis4
et ainsi de suite. Étant donné que ceux-ci sont additionnés, nous sommes toujours à court d'une puissance de 2, que nous fixons avec le1
à la fin.En raison du saut de ligne de fin, la correspondance est simplement supprimée de l'entrée.
la source
R , 28 octets
Essayez-le en ligne!
Le plus simple pour calculer le bit le plus significatif via
2 ^ floor(log2(x))
plutôt que d'effectuer des conversions de base, qui sont assez verbeuses dans Rla source
PARI / GP, 18 octets
Solution alternative:
la source
n->n-2^logint(n,2)
? Le second n'est pas pris en charge dans ma version de PARI / GP, ni dans la version utilisée par tio.run . Est-ce une nouvelle fonction?exponent
été ajouté il y a 5 jours, par rapport à ce défi qui a été ajouté hier. :)Haskell ,
3229 octetsEssayez-le en ligne!
-3 octets grâce à @Laikoni
Ancienne solution, 32 octets
Essayez-le en ligne!
la source
f=
dans la première variante. En outrez<-2*y=x!z
enregistre un octet: Essayez en ligne!Excel, 20 octets
la source
Excel,
3631 octets-5
octets grâce à @ IanM_Matrix1Rien d'interessant.
la source