Prenez une chaîne de caractères binaires séparés par un espace et convertissez-la en chaîne ASCII.
Par exemple...
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100
Se convertirait en ...
Hello World
La chaîne binaire sera stockée dans une variable appelée s
.
Il s'agit d'un défi de code-golf, donc la solution la plus courte l'emporte.
ZX81
ici.Réponses:
Rubis,
3632Ou 31
Optimisations grâce à Chron
la source
.join""
pour*""
enregistrer quelques caractères. Vous pouvez également le faire avec gsub au lieu de split + map + join, quelque chose comme:s.gsub(/\w+ ?/){$&.to_i(2).chr}
(31 caractères).s.gsub(/\d+./){$&.to_i(2).chr}
fonctionne et c'est 30 caractères, je ne sais pas pourquoi cela fonctionne bien. Le.
ne devrait pas correspondre la dernière fois mais c'est le cas.JavaScript (ES6) 49
55 56 64Edit Accepter la suggestion @bebe - merci
Edit2 Ne connaissait pas le littéral numérique binaire - merci @kapep
Edit3 Wow 6
pas 4octets enregistrés thx @ETHproductionsExplication demandée dans les commentaires
String.replace
peut prendre 2 arguments:/\d+./g
: un ou plusieurs chiffres suivis d'un caractère différent - le drapeau g spécifie de rechercher le motif plus d'une foisIl convient de noter qu'à la fin de la chaîne, l'expression rationnelle correspond à la séquence de chiffres sans espace de fin, dans ce cas, le point correspond au dernier chiffre. Essayez '123'.match (/ (\ d +) ./) pour vérifier.
(Toujours) l'un des morceaux de javascript les plus verbeux jamais ...
(L'affectation à la chaîne n'est pas comptée)
la source
s.replace(/\d+./g,x=>String.fromCharCode(parseInt(x,2)))
56s.replace(/\d+./g,x=>String.fromCharCode(eval("0b"+x)))
55/\d+./g,x=>
fait?eval('0b'+x)
pour'0b'+x-0
sauver 4 octets.Bash + utilitaires Linux communs, 25 octets
explication dc
m
pour:m
macro si la pile n'est pas videm
inscrireParce que nous poussons d'abord la chaîne binaire entière vers la pile, lorsque nous sautons chaque valeur, nous nous retrouvons avec la chaîne inversée. Nous utilisons donc l'
rev
utilitaire pour corriger cela.Exemple d'utilisation:
la source
PowerShell, 49
EDIT: Je n'ai pas vu l'autre réponse PowerShell. Mais il n'y a essentiellement qu'une seule façon de résoudre ce problème.
la source
C -
574338/31Version 38 octets:
Ou seulement 31 octets si s est un pointeur:
Je ne pense pas que ce soit exactement la façon dont les boucles sont censées être utilisées ... mais cela fonctionne.
la source
Pyth , 12
Notez que s n'est pas une variable légale en Pyth, j'ai donc utilisé Z à la place.
Explication:
Exemple:
la source
id2
à la place dev+"0b"d
? En tout cas, c'est à la fois illisible et cool.code machine x86 sous DOS - 22 octets
Puisqu'il n'y a pas de vraies variables de chaîne dans le code machine (et en particulier, aucune variable nommée "
s
"), j'ai choisi stdin en entrée.Entrée NASM:
la source
Powershell (
5249)Boucle simple sur une chaîne binaire dans $ s. Le fait d'inclure le [converti] tue cependant mon score.
EDIT: Il n'y a vraiment qu'une seule façon de réussir cela dans Powershell, wowie. Joey et moi avons obtenu à peu près la même réponse en travaillant indépendamment!
Contribution:
Sortie:
la source
Mathematica, 52 octets
Ah, les beaux noms de fonctions de Mathematica
la source
Perl
3332Edit: Solution mise à jour, 32.
Solution précédente (33):
ou
Tester:
la source
J (23)
Tester:
Explication:
la source
Golfscript - 21
Vous pouvez le tester ici .
la source
Coque Python
4440 caractèresMerci pour l'aide Griffin .
la source
APL (15)
Tester:
Explication:
⍎s
: évaluers
, en le transformant en un tableau d'entiers. Les tableaux sont écrits sous forme de nombres séparés par des espaces, donc cela se divises
.{
...}¨
: pour chaque élément:⍕⍵
: remettez le nombre en chaîne⍎¨
: évaluer chaque chiffre individuel, en donnant une chaîne de bits2⊥
: décodage base-2, donnant les chiffres⎕UCS
: obtenir le caractère pour chaque numérola source
PHP (61)
la source
foreach(str_split($s,8)as$v)echo chr(bindec($v));
str_split($s,8)
non significatifs donc ne fonctionnera pas.foreach(explode(' ',$s)as$v)echo chr(bindec($v));
serait valide mais je ne prévois pas d'éditer une de mes premières réponses PPGC qui n'est clairement pas vraiment jouée de toute façon. Merci quand même!Bacchus , 25 octets
Explication:
S,' 'j
diviser la chaîne S par l'espace vide et le convertit en un bloc (une sorte de tableau).:A=
obtenir le bloc précédent et l'assigner à une variable A.(),A¨
pour chaque élément dans AÖ,2,10b
Lisez l'élément actuel (représenté parÖ
) dans la base 2 et transformez-le en base 10.:c
obtenir la valeur précédente et imprimer en tant que charla source
GolfScript 23
Test en ligne ici .
la source
C - 63
puisque C n'a pas de convertisseur base 2 dans la bibliothèque standard: testez ici
éditez: il y en a, je suis juste trop stupide pour le savoir
la source
Run Brainfuck encodé en longueur, 49 octets
Puisqu'il n'y a pas de variables dans Brainfuck, j'ai juste utilisé des entrées et sorties standard à la place.
Le code
32+
doit être interprété comme 32+
s par l'interprète. Remplacez-les simplement manuellement si votre interprète ne prend pas en charge RLE.Version étendue (non RLE): (91 octets)
Le code suppose que EOF est codé comme 0.
Explication
La disposition suivante est utilisée:
Où
x
est l'octet ASCII à imprimer,a
est le caractère a de l'entrée standard etflag
est 1 sia
était un espace.la source
Java 8:60 octets
Utilisation de lambdas dans Java 8 (75 octets):
Et si vous autorisez les importations statiques (que certains utilisent ici), c'est (61 octets):
Une version un peu plus courte utilisant la boucle for (60 octets):
la source
Clojure 63 (ou 57)
Le tout-Clojure implique:
Avec Java interop:
Session REPL:
la source
QBasic, 103
Quelle? Nous n'avons pas de fonctions fantaisie binaires à décimales ici. Fais le toi-même!
Je compte la nouvelle ligne (qui je pense est nécessaire pour obtenir le if-then-else sans an
END IF
) comme un octet, par cette méta-publication . Je ne sais pas si QB64 sous Windows accepterait un fichier de code de cette façon ou non. Peu importe probablement peu.la source
NodeJS - 62
PHP - 75
la source
JavaScript 111
Cela fait la conversion des nombres sans parseInt ou eval. En lisant la chaîne en arrière et en comptant les bits, il définit le bit x s'il est un. Lorsqu'un espace est trouvé, le nombre est converti en caractère et un nouveau nombre 0 est démarré pour définir les bits.
la source
Groovy 64
la source
CJam, 11 octets
s n'est pas un nom de variable légal dans CJam, j'ai donc choisi N à la place.
Essayez-le en ligne.
Exemple d'exécution
Comment ça marche
la source
Haskell - 48 (+13 importations (?))
Voici ma première tentative de golf à Haskell.
Vous devez importer Data.Char
utilisation (en ghci):
Explication:
la source
GNU Sed, 19 octets
Inspiré par une excellente réponse @Digital Trauma.
Golfé
Tester
la source
Pyth, 7 octets (non concurrent)
Prend l'entrée comme chaîne.
Essayez!
la source
05AB1E , 4 octets (non concurrent)
Sauvegardé 3 octets grâce à @Emigna
Essayez-le en ligne!
la source
#CçJ
fonctionne également. Bien que dans cette version et dans votre version, vous ayez besoinð¡
au lieu de#
si l'entrée ne peut être que de 1 caractère.