Il s'agit d'un défi de golf de code. Comme le titre l'indique, écrivez un programme pour convertir une chaîne de caractères ascii en binaire.
Par exemple:
"Hello World!"
devrait se transformer en
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100 100001
.
Remarque: je suis particulièrement intéressé par une implémentation pyth.
code-golf
string
binary
conversion
ericmarkmartin
la source
la source
Réponses:
CJam, 8 octets
Peasy facile:
Essayez-le ici
la source
Python 3, 41 octets
Comme la réponse de KSFT , mais je pensais souligner que, en plus de
raw_input -> input
, Python 3 a également un avantage ici en raison du splat pourprint
.la source
Pyth, 10 octets
Mappage et explication Python:
L'entrée est la chaîne qui doit être convertie sans les guillemets.
Essayez-le ici
la source
Psum(d).append(Pfilter(lambda T:gte(head(join(Plen(k),Plen())))))
, whee d = '' et k = ''. Donc non, ce n'est pas valable du tout.Python 3-43 octets
Pas tout à fait le plus court, mais une approche intéressante de l'OMI. Il a l'avantage supplémentaire que si le nombre de bits significatifs varie, EG
Hi!
, le remplissage avec des zéros est trivial (2 octets de plus, contre 9 pour.zfill(8)
):la source
Python - 52
Je vais travailler sur la traduction de cela en Pyth.Quelqu'un d'autre a déjà fait une réponse Pyth.Si vous ne vous souciez pas qu'il s'agisse d'un programme complet ou du format d'E / S et que vous utilisez Python 3, vous pouvez le faire en 23 octets comme ceci:
x
est l'entrée.Je sais que cela ne compte pas parce que l'interprète n'a pas été libéré avant la publication du défi, mais ici, c'est dans KSFTgolf:
la source
Rubis,
342824 octetsPrend entrée via STDIN. 6 octets enregistrés grâce à AShelly et 4 autres grâce à britishtea.
la source
$<.each_byte{|c|$><<"%b "%c}
String#bytes
au lieu deString#each_byte
. Le formulaire de blocage est obsolète, mais il fonctionne toujours :)PowerShell,
635946 octets-13 octets grâce à @mazzy
Essayez-le en ligne!
la source
Matlab
Ceci est une fonction anonyme
l'utilisation est
f('Hello World')
.Alternativement, si
x
est défini comme la chaîneHello World!
dans l'espace de travail, alorsdec2bin(char(x))
cela fonctionnera.la source
char
? Je pense que tu veux diredec2bin(x)-'0'
char(x)
quandx
est déjà une chaîne, ne fait rien. Vous pouvez donc le supprimer pour économiser de l'espace. D'un autre côté, le résultatdec2bin
est une chaîne, et je pense que la sortie devrait être des nombresJ - 9
Je ne sais pas comment faire ça en ligne sans doubler la longueur du code, j'ai besoin de gourous J pour me le dire :)
la source
".
au début. Il évalue votre résultat afin qu'il soit sur une seule ligne et séparé par des espaces. Même plus courte est de créer Base10 nombres avec les chiffres Base2:10#.#:3&u:
.Java - 148 octets
Modifié pour inclure le fichier complet
la source
for(char c:a[0].toCharArray()){
ou mêmefor(byte b:a[0].getBytes()){
puisque l'entrée est ascii, en supposant un environnement local de machine non-utf-16public
et raccourcir le nom du programme en un seul caractère pour gagner plus d'octets. De plus,(String[]a)
est parfaitement accepté par le compilateur, vous gagnant un autre octet.JavaScript ES6, 63
65octetsC'est assez long, grâce aux longs noms de fonctions de JavaScript. L'extrait de pile ci-dessous est l'équivalent approximatif d'ES5, il peut donc être exécuté dans n'importe quel navigateur. Merci à edc65 pour les améliorations apportées au golf.
la source
[for of]
est légèrement plus court que[...].map
pour énumérer les caractères dans les chaînes:alert([for(c of prompt())c.charCodeAt().toString(2)].join(' '))
.join(' ')
par.join` `
. Vous pouvez jouer au golf sur beaucoup d'octets en utilisant une fonction au lieu deprompt
/alert
Scala -
59-55octetsNormalement, il faut utiliser foreach et non map.
la source
Code machine 8088, IBM PC DOS,
3331 octets *Référencement:
Fichier COM exécutable PC DOS complet, l'entrée se fait via la ligne de commande.
Avec des zéros non significatifs:
Téléchargez et testez ASCBIN.COM .
Ou 39 octets sans zéros non significatifs:
Téléchargez et testez ASCBIN2.COM .
* Comme il n'était pas clairement clair pour moi si les zéros en tête sont autorisés ou non, je publie des versions dans les deux sens.
la source
MITS Altair 8800 , 0 octets
La chaîne d'entrée est à l'adresse mémoire
#0000H
( autorisée ). Sortie en binaire via les voyants d'E / S du panneau avantD7-D0
.Exemple, faites
RESET
, puisEXAMINE
pour voir le premier octet, puis répétezEXAMINE NEXT
pour voir le reste."H" = 01 001 000:
"e" = 01 100 101:
"l" = 01 101 100:
Essayez-le en ligne!
Non compétitif, bien sûr. :)
la source
Haskell, 65
utilisation intensive de la liste monade. il n'a pas pu être converti en liste de comprehentions car les dernières instructions n'étaient pas un
return
.la source
C ++ - 119 octets
Libérer de la mémoire? Qu'est-ce que c'est?
(MSVC compile le code avec avertissement)
la source
main(int c,char**v){char x[9];for(;c=*(v[1]++);printf("%s ",itoa(c,x,2)));}
Gelée , 3 octets
Essayez-le en ligne!
la source
Tcl , 52 octets
Essayez-le en ligne!
la source
binary scan [join $argv] B* b;puts [regsub -all .{8} $b {& }]
APL (Dyalog) , 12 octets
Essayez-le en ligne!
Merci à Adám pour son aide avec cette solution.
la source
Python 3.6 , 39 octets
Essayez-le en ligne!
la source
Commodore VIC-20 / C64 / 128 et TheC64Mini, 101 octets BASIC à jeton
Voici la liste masquée à l'aide des abréviations des mots clés Commodore BASIC:
Voici à des fins d'explication la liste symbolique non masquée:
La fonction
fn b
déclarée à la ligne zéro accepte un paramètre numériquex
dontAND
la valeur est edb
; SGN est ensuite utilisé pour convertirx and b
en1
ou0
.La première ligne accepte une entrée de chaîne dans la variable
a$
et la boucle démarre (indiquée pari
) à la longueur de cette entrée.b
représente chaque bit du 6e au 0e bit.c$
prend chaque caractère de la chaîne en positioni
.la ligne 5 démarre la boucle pour tester chaque position de bit;
right$
est utilisé à la ligne 6 pour supprimer un problème de mise en forme automatique lorsque Commodore BASIC affiche un nombre, convertissant la sortie defn b
en chaîne;asc(c$)
convertit le caractère actuel en son code ascii sous forme de valeur décimale.La ligne 7 représente la valeur de bit suivante. La boucle
j
est terminée avant d'imprimer un espace, puis la dernière bouclei
est terminée.la source
JavaScript ES6, 71 octets
la source
.split('')
diviser la chaîne vide;.split()
se transforme"abc"
en["abc"]
.Forth (gforth) , 45 octets
Essayez-le en ligne!
Explication du code
la source
Rubis, 24 octets
J'espérais battre Martin Ender , mais je n'ai réussi qu'à l'attacher.
Prend entrée sur STDIN; +1 octet pour l'
-p
indicateur.Essayez-le en ligne!
la source
Gaia , 4 octets
Assez content avec ça
Comment ça fonctionne
Essayez-le en ligne!
la source
Python 3 , 39 octets
Essayez-le en ligne!
Légère amélioration par rapport à la réponse Python leader actuelle
la source
STATA 158
J'ai utilisé une approche différente de la plupart. Lisez-le via l'invite display _request () (raccourci à di _r (r)). Écrivez la chaîne dans un fichier appelé b en mode texte. Ouvrez b en mode binaire et lisez chaque caractère sous forme d'octet et convertissez-le en binaire. Techniquement, le fichier b doit être fermé à la fin, mais c'est un programme valide qui s'exécute correctement sans lui.
la source
Golang - 68
Je suis nouveau sur Go et je ne suis pas sûr des règles de comptage des caractères dans cette langue ici non plus.
Importations (11 octets):
Fonction (55 octets):
Vous pouvez l'exécuter ici .
la source
Jamais C # ne gagnera ce genre de questions mais voici un essai, complètement sans encodage. :)
C # - 84
la source
x=>String.Join(" ",x.Select(y=>Convert.ToString(y,2)));
Cependant, notez qu'en raison de l'utilisation.Select()
, cette réponse plus courte et votre réponse d'origine doivent inclure les 18 octets pour,using System.Linq;
sauf si vous spécifiez qu'elle utilise le compilateur interactif Visual C # , qui importe System.Linq par défautCobra - 64
En tant que Lambda:
la source