Étant donné un entier binaire inclusivement entre 0
et 1111111111111111
(c'est-à-dire un entier non signé 16 bits) en entrée, sortez le même entier en négabinaire .
L'entrée peut être dans le format qui convient le mieux à votre langue; par exemple, s'il est plus facile pour le programme de gérer l'entrée avec 16 chiffres, comme 0000000000000101
, plutôt que simplement 101
, vous pouvez écrire le programme pour accepter uniquement l'entrée de cette façon.
Exemple d'E / S
> 1
1
> 10
110
> 1010
11110
> 110111001111000
11011001110001000
> 1001001
1011001
Voici un exemple de programme que j'ai écrit qui effectue des conversions de base, y compris des bases négatives et non entières. Vous pouvez l'utiliser pour vérifier votre travail.
code-golf
binary
base-conversion
Peter Olson
la source
la source
0
s et1
s. Cela me semble clair, mais une réponse me fait douter légèrement ...Réponses:
APL, 21 caractères
J'ai utilisé Dyalog APL pour cela, avec
⎕IO
la valeur 0, nous permettant d'indexer les tableaux à partir de 0 plutôt que 1.Explication, de droite à gauche:
⍞
nous donne l'entrée de l'utilisateur comme vecteur de caractères.⍎¨
applique la fonction d'exécution (⍎
) à chacun (¨
) des caractères susmentionnés, résultant en un vecteur d'entiers 1 et 0.2⊥
décode le vecteur de la base 2 en décimal.-
annule l'entier décimal résultant.(16/¯2)⊤
code l'entier décimal en base¯2
(négatif 2). (16/¯2
réplique¯2
,16
fois, donnant 16 chiffres dans notre nombre négabinaire.)-
annule chaque élément de notre nombre nouvellement encodé (avant cela, il se compose de -1 et de 0), afin que nous puissions l'utiliser pour indexer notre vecteur de caractères.'01'[ ... ]
indexe le tableau de caractères ('01'
) en utilisant les 0 et les 1 du vecteur négabinaire inversé. C'est ainsi que nous obtenons une sortie plus jolie.Exemple:
la source
Ruby,
3231 caractèresUtilise le raccourci de calcul négabinaire .
la source
gets
mot - clé, qui récupère de STDIN.GolfScript,
342927 caractèresUne approche simple et directe. Il est assez intéressant de noter que la version la plus courte est celle qui se convertit d'abord en nombre, puis en base -2 (au moins la version la plus courte que j'ai pu trouver jusqu'à présent). Mais la bonne chose à propos de celui-ci est qu'il contient près de 15%
%
.Edit 1: Pour la base 2, nous pouvons enregistrer une opération modulo et également joindre les deux boucles.
Edit 2: J'ai trouvé un code encore plus court pour convertir une chaîne binaire en entier.
la source
Haskell,
8683 octetsAppelez en utilisant c puis un tableau d'entiers pour les chiffres, par exemple
PS: je suis nouveau, ai-je soumis cela correctement?
EDIT: enregistré quelques octets grâce à Laikoni et également corrigé quelques fautes de frappe
EDIT2: Alternativement, c :: String -> String:
Pour 114 octets (mais vous l'appelez avec une chaîne: c "11")
la source
undigits 2 n
, car l'application de fonction se lie plus fort que le+m
. Vous pouvez également enregistrer quelques octets en se liantm
dans une gardec n|m<-0xAAAAAAAA= ...
.Python (2.x), 77 caractères
(pas aussi court que les autres solutions en raison de la nécessité de changer manuellement de base ...) Devrait satisfaire aux exigences.
Les suggestions d'améliorations supplémentaires sont les bienvenues!
Alimentez-le avec des valeurs de départ comme celle-ci:
0b1001001
la source
JavaScript, 68 octets
Serait de 52 octets dans ES6, mais cela postdate le défi:
la source
Gelée , 4 octets, défi de postdates de langue
Essayez-le en ligne!
Prend l'entrée et produit la sortie sous forme de liste de chiffres.
Explication
Ceci est à peu près juste une traduction directe de la spécification.
la source
k, 17 octets sans concurrence
Certaines des fonctionnalités utilisées sont probablement postérieures au défi.
L'entrée est une liste de 1 et de 0, et la sortie est également une liste de 1 et de 0.
la source
PHP, 69 octets
Version en ligne
la source
ES8, 54B
la source
05AB1E , 4 octets
Essayez-le en ligne!
la source
Japt , 4 octets
Entrée sous forme de chaîne binaire, sortie sous forme de tableau de chiffres négatifs.
Essayez-le
Ou, en prenant l'entrée comme un tableau de chiffres binaires:
Essayez-le
la source