Donc , vous êtes donné une POSITIVE base 10 (décimal) nombre. Votre travail consiste à inverser les chiffres binaires et à renvoyer ce nombre base 10.
Exemples:
1 => 1 (1 => 1)
2 => 1 (10 => 01)
3 => 3 (11 => 11)
4 => 1 (100 => 001)
5 => 5 (101 => 101)
6 => 3 (110 => 011)
7 => 7 (111 => 111)
8 => 1 (1000 => 0001)
9 => 9 (1001 => 1001)
10 => 5 (1010 => 0101)
Il s’agit d’un défi code-golf . La solution utilisant le moins d’octets gagne.
C'est A030101 dans l'OEIS.
code-golf
number
base-conversion
binary
JuniorRubyist
la source
la source
Réponses:
Python , 29 octets
Essayez-le en ligne!
C'est une fonction anonyme, sans nom, qui renvoie le résultat.
Tout d'abord,
bin(n)
convertit l'argument en une chaîne binaire. Nous inverserions cela normalement avec la notation slice[::-1]
. Ceci lit la chaîne avec un pas de -1 , c'est-à-dire en arrière. Cependant, les chaînes binaires en Python sont préfixées par un0b
, et nous donnons donc le second argument du slicing à 1 , indiquant à Python de lire à l'envers se terminant à l'index 1 , donc pas aux index 1 et 0 .Maintenant que nous avons la chaîne binaire en arrière, nous la passons
int(...)
avec le deuxième argument sous la forme 2 . Ceci lit la chaîne comme un entier de base 2, qui est ensuite implicite renvoyé par l'expression lambda.la source
Python, 29 octets
Essayez-le en ligne
la source
JavaScript (ES6),
3028 octets2 octets sauvés grâce à @Arnauld
Ceci calcule essentiellement l’inverse un bit à la fois: nous commençons avec q = 0 ; tant que n est positif, nous multiplions q par 2, coupons le dernier bit de n avec
n>>1
et ajoutons-le à q avec|n%2
. Lorsque n atteint 0, le nombre a été inversé avec succès et nous renvoyons q .Grâce aux longs noms intégrés de JS, la solution de facilité est 44 octets:
En utilisant la récursivité et une chaîne, vous pouvez obtenir une solution de 32 octets qui fait la même chose:
la source
f=(n,q)=>n?f(n>>1,q*2|n%2):q
fonctionne presque. Mais malheureusement pas pourn=0
.Java 8,
53474645 octetsIl s'agit d'une expression lambda qui a le même principe que la réponse d'ETH (bien que la récursivité aurait été trop détaillée en Java, nous lançons donc en boucle):
Essayez-le en ligne!
Ceci peut être assigné avec
IntFunction<Integer> f = ...
, puis appelé avecf.apply(num)
. Développé, non-modifié et commenté, il ressemble à ceci:la source
t*2
au lieu de(t<<1)
, un de plus en déplaçant ce calcul de la tête de boucle au corps de la boucle. Pouvez-vous utiliserx
au lieu dex>0
pour la condition?x>>=1
peut être remplacé parx/=2
ce qui sera automatiquement une division entière.t=t*2+
ent+=t+
.)J, 6 octets
|.
sens inverse&.
en dessous de#:
base 2la source
Gelée , 3 octets
Essayez-le en ligne!
la source
Mathematica, 19 octets
la source
Labyrinthe, 23 octets
Eh bien, c’est maladroit… cela renvoie le numéro BINARY inversé… Merci @Martin Ender d’avoir signalé à la fois mon bogue et mon erreur ID 10T. Donc, cela ne fonctionne pas, je vais devoir trouver une autre solution.
la source
# Labyrinth, 89 bytes
_
trouvent aux carrefours.C,
48444342 octets-1 octet grâce à gurka et -1 octet grâce à anatolyg:
Solution précédente de 44 octets:
Solution précédente de 48 octets:
Ungolfed et utilisation:
la source
r
déjà initialisé à zéro icir;f(n){r=0;
, par exemple ler=0;
est inutile? Egalement une faute de frappe mineure: "La solution précédente de 48 octets"for
boucles sont toujours au moins aussi courteswhile
et souvent plus courtes.r;f(n){for(r=n&1;n/=2;r=2*r+n%2);return r;}
? 1 octet plus court, mais je ne sais pas s'il est valide C (C99).=
en+=
pour le rendre plus court et plus obscurcieRuby,
2928 octets"% b"% n formate l'entrée n en tant que chaîne binaire, inverse, puis reconverti en nombre
Usage / Cas de test:
la source
2
est la base vers laquelle il se convertit etn
constitue l’entrée.->args{return value}
est la syntaxe ruby lambda.to_i(2)
?05AB1E , 3 octets
Essayez-le en ligne!
la source
Java (OpenJDK) , 63 octets
Essayez-le en ligne!
Merci de chercher pour -12 octets et Cyoce pour -8 octets!
la source
a
dans ce contexte)print
plutôt queprintln
pour le golf :)StringBuffer
enregistre un octetStringBuilder
+""
au lieu de.toString()
?Perl 6 , 19 octets
la source
$_
. Ce n'est pas mentionné nommément, mais labase
méthode est appelée dessus.{:2(.base(2).flip)}(10)
le REPL en imprimera 5. Ainsi, elle répond aux critères standard code-golf d'une fonction.Haskell, 36 octets
Même algorithme (et longueur!) Que la réponse JavaScript d' ETHproductions .
la source
Utilitaires Bash / Unix,
2423 octetsEssayez-le en ligne!
la source
PHP, 33 octets
convertir en base2, chaîne inverse, convertir en décimal. Enregistrer dans un fichier et exécuter en tant que pipe avec
-F
.pas de composants intégrés:
itératif, 41 octets
Pendant que l’entrée a défini des bits, extrayez-en un peu et transmettez-le à la sortie. Courez comme un tuyau avec
-nR
.récursif, 52 octets
la source
$r+=$r
. Mais je ne me souviens pas vraiment pourquoi j’ai mis cela devant.MATL , 4 octets
Essayez-le en ligne!
Explication
la source
Pyth, 6 octets
Suite de test disponible ici.
Explication
la source
Japt , 5 octets
Essayez-le en ligne!
la source
)
pourrait être un espace trop :-)Scala, 40 octets
Usage:
Explication:
la source
Mathematica, 38 octets
la source
Groovy, 46 octets
la source
it
fait référence à l'argument donné à un bloc IIRCCJam , 8 octets
Essayez-le en ligne!
Explication
la source
Lot, 62 octets
Explication: Lors de la première passe,
%1
contient le paramètre d'entrée tandis que%2
est vide. Nous évaluons doncn
comme moitié%1
etr
comme+%1
modulo 2 (l'%
opérateur doit être doublé pour le citer). Sin
n'est pas égal à zéro, nous nous appelons alors la queue récursivement passern
et une expression qui est évaluée lors de la prochaine passe doublant àr
chaque fois.la source
C #, 98 octets
la source
R, 55 octets
Lit les entrées de stdin et utilise par conséquent la
bin
fonction dumiscFuncs
package pour convertir le vecteur décimal en un vecteur binaire.la source
Arrogant , 19 octets
Aucune conversion de base intégrée!
Essayez-le en ligne!
Pushy a deux piles, et cette réponse l’utilise beaucoup.
Il y a deux parties deux ce programme. Tout d'abord,
$&2%v2/;F
convertit le nombre en sa représentation binaire inverse:Étant donné l'exemple 10, les piles apparaîtront comme suit à chaque itération:
Nous pouvons voir qu'après l'itération finale,
0, 1, 0, 1
a été créé sur la deuxième pile - les chiffres binaires inversés de 10,0b1010
.La deuxième partie du code,
L:vK2*;OS#
est tirée de ma réponse précédente, qui convertit les données binaires en valeurs décimales . En utilisant la méthode décrite et expliquée dans cette réponse, il convertit les chiffres binaires de la pile en un entier de base 10 et affiche le résultat.la source
k, 18 octets
Exemple:
la source
C #, 167 octets
Explication:
Ici, je vais itérer n valeurs et à chaque fois que la valeur entière itérée est convertie en valeur d'octet, puis inverser cette valeur d'octet et cette valeur d'octet est convertie en valeur entière.
la source
STDIN
(je pense que c'est,console.Read()
mais vous le sauriez probablement mieux que moi) etSTDOUT
. Quoi qu'il en soit, bienvenue sur le site si vous souhaitez des conseils plus expérimentés dans le domaine du golf C #, je vous recommanderais codegolf.stackexchange.com/questions/173/….Reverse()
returnesIEnumerable<char>
. Comme ilConvert.ToInt32
n’ya pas de surcharge pour IEnumerable, il lève une exception. De plus, la réponse ne suit pas les règles pour le code golf: 1) Comme rien n'est spécifié, la soumission doit être un programme complet ou une fonction et pas seulement un extrait. 2) lesusing
déclarations doivent être incluses dans le nombre d'octetsc / c ++ 136 octets
Cela ne va pas gagner, mais je voulais adopter une approche différente en c / c ++ 120 octets dans la fonction
Pour préciser ce que je suis en train de faire, j’ai utilisé la fonction log pour déterminer le nombre de bits utilisés par l’entrée. Puis une série de trois bits décale gauche / droite, intérieur / extérieur, pair / impair qui renverse l’entier entier. Enfin, changez un peu pour décaler le nombre vers la droite. L'utilisation de décimales pour les décalages de bits au lieu d'hex est une tâche difficile, mais cela économise quelques octets.
la source