Este es un desafío de código de golf. Tal como dice el título, escriba un programa para convertir una cadena de caracteres ascii en binario.
Por ejemplo:
"Hello World!"
debe convertirse en
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100 100001
.
Nota: Estoy particularmente interesado en una implementación de Pyth.
code-golf
string
binary
conversion
ericmarkmartin
fuente
fuente
Respuestas:
CJam, 8 bytes
Pan comido:
Pruébalo aquí
fuente
Python 3, 41 bytes
Me gusta la respuesta de KSFT , pero pensé en señalar que, además de
raw_input -> input
, Python 3 también tiene una ventaja aquí debido al splat paraprint
.fuente
Pyth, 10 bytes
Mapeo y explicación de Python:
La entrada es la cadena que debe convertirse sin las comillas.
Pruébalo aquí
fuente
Psum(d).append(Pfilter(lambda T:gte(head(join(Plen(k),Plen())))))
, donde d = '' yk = ''. Entonces no, no es válido en absoluto.Python 3 - 43 bytes
No es el más corto, sino un enfoque interesante de la OMI. Tiene la ventaja adicional de que si el número de bits significativos varía, EG
Hi!
, el relleno con ceros es trivial (2 bytes más, en lugar de 9 para.zfill(8)
):fuente
Python - 52
Trabajaré en traducir esto a Pyth.Alguien más ya respondió Pyth.Si no le importa que sea un programa completo o sobre el formato de E / S y use Python 3, puede hacerlo en 23 bytes de esta manera:
x
es la entradaSé que esto no cuenta porque el intérprete no fue lanzado antes de que se publicara el desafío, pero aquí está en KSFTgolf:
fuente
Ruby,
342824 bytesToma entrada a través de STDIN. 6 bytes guardados gracias por AShelly y otros 4 gracias a britishtea.
fuente
$<.each_byte{|c|$><<"%b "%c}
String#bytes
lugar deString#each_byte
. La forma de bloque está en desuso, pero aún funciona :)PowerShell,
635946 bytes-13 bytes gracias a @mazzy
Pruébalo en línea!
fuente
Matlab
Esta es una función anónima
uso es
f('Hello World')
.Alternativamente, si
x
se define como la cadenaHello World!
en el espacio de trabajo, entonces simplementedec2bin(char(x))
funcionará.fuente
char
? Creo que te refieresdec2bin(x)-'0'
char(x)
cuandox
ya es una cadena, no hace nada. Para que pueda eliminarlo para ahorrar algo de espacio. Por otro lado, el resultado dedec2bin
es una cadena, y creo que la salida debería ser númerosJ - 9
No tengo idea de cómo hacer esto en una fila sin duplicar la longitud del código, necesito que J gurus me lo diga :)
fuente
".
al principio. Evalúa su resultado para que esté en una línea y separado por espacios. Incluso más corta es la creación de Base10 números con los dígitos Base2:10#.#:3&u:
.Java: 148 bytes
Editado para incluir el archivo completo
fuente
for(char c:a[0].toCharArray()){
o inclusofor(byte b:a[0].getBytes()){
dado que la entrada es ascii, suponiendo una configuración regional de máquina no utf-16public
y acortar el nombre del programa a un solo carácter para ganar más bytes. Además,(String[]a)
el compilador lo acepta perfectamente, lo que le otorga otro byte.JavaScript ES6, 63
65bytesEsto es bastante largo, gracias a los nombres largos de funciones de JavaScript. El siguiente fragmento de pila es el equivalente aproximado de ES5, por lo que se puede ejecutar en cualquier navegador. Gracias a edc65 por las mejoras en el golf.
fuente
[for of]
es un poco más corto que[...].map
enumerar caracteres en cadenas:alert([for(c of prompt())c.charCodeAt().toString(2)].join(' '))
.join(' ')
con.join` `
. Puedes jugar muchos bytes usando una función en lugar deprompt
/alert
Scala -
59-55bytesNormalmente, uno debe usar foreach y no el mapa.
fuente
Código de máquina 8088, IBM PC DOS,
3331 bytes *Listado:
Archivo COM ejecutable completo de PC DOS, la entrada es a través de la línea de comando.
Con ceros a la izquierda:
Descargue y pruebe ASCBIN.COM .
O 39 bytes sin ceros a la izquierda:
Descargue y pruebe ASCBIN2.COM .
* Como no estaba explícitamente claro para mí si los ceros iniciales están permitidos o no, estoy publicando versiones en ambos sentidos.
fuente
MITS Altair 8800 , 0 bytes
La cadena de entrada está en la dirección de memoria
#0000H
( permitida ). Salida en binario a través de luces de E / S del panel frontalD7-D0
.Ejemplo, haz
RESET
, luegoEXAMINE
para ver el primer byte, seguido de repetirEXAMINE NEXT
para ver el resto."H" = 01 001 000:
"e" = 01 100 101:
"l" = 01 101 100:
Pruébalo en línea!
No competidora, por supuesto. :)
fuente
Haskell, 65
uso intensivo de la lista mónada. no se pudo convertir en comprensiones de listas porque las últimas declaraciones no eran a
return
.fuente
C ++ - 119 bytes
¿Liberando memoria? ¿Que es eso?
(MSVC compila el código con advertencia)
fuente
main(int c,char**v){char x[9];for(;c=*(v[1]++);printf("%s ",itoa(c,x,2)));}
Jalea , 3 bytes
Pruébalo en línea!
fuente
Tcl , 52 bytes
Pruébalo en línea!
fuente
binary scan [join $argv] B* b;puts [regsub -all .{8} $b {& }]
APL (Dyalog) , 12 bytes
Pruébalo en línea!
Gracias a Adám por la ayuda con esta solución.
fuente
Python 3.6 , 39 bytes
Pruébalo en línea!
fuente
Commodore VIC-20 / C64 / 128 y TheC64Mini, 101 bytes BASIC tokenizados
Aquí está la lista ofuscada usando las abreviaturas de palabras clave Commodore BASIC:
Aquí, para fines de explicación, está el listado simbólico no ofuscado:
La función
fn b
declarada en la línea cero acepta un parámetro numéricox
que seAND
edita con el valor deb
; SGN se utiliza para convertirx and b
a1
o0
.La línea uno acepta una entrada de cadena a la variable
a$
, y el ciclo comienza (indicado coni
) a la longitud de esa entrada.b
representa cada bit del sexto al 0º bit.c$
toma cada carácter de la cadena en su posicióni
.la línea 5 inicia el bucle para probar cada posición de bit;
right$
se utiliza en la línea 6 para eliminar un problema de formateo automático cuando Commodore BASIC muestra un número y convierte la salida defn b
a una cadena;asc(c$)
convierte el carácter actual a su código ASCII como un valor decimal.La línea 7 representa el siguiente valor de bit. El ciclo
j
finaliza antes de imprimir un espacio, luegoi
finaliza el último ciclo .fuente
JavaScript ES6, 71 bytes
fuente
.split('')
dividir en la cadena vacía;.split()
se convierte"abc"
en["abc"]
.Adelante (gforth) , 45 bytes
Pruébalo en línea!
Explicación del código
fuente
Rubí, 24 bytes.
Tenía la esperanza de vencer a Martin Ender , pero solo logré atarlo.
Toma entrada en STDIN; +1 bytes para la
-p
bandera.Pruébalo en línea!
fuente
Gaia , 4 bytes
Bastante feliz con esto
Cómo funciona
Pruébalo en línea!
fuente
Python 3 , 39 bytes
Pruébalo en línea!
Ligera mejora con respecto a la respuesta actual de Python
fuente
STATA 158
Usé un enfoque diferente al de la mayoría. Lea a través del indicador display _request () (abreviado a di _r (r)). Escriba la cadena en un archivo llamado b en modo texto. Abra b en modo binario y lea cada carácter como un byte y conviértalo a binario. Técnicamente, el archivo b debe cerrarse al final, pero es un programa válido y se ejecuta con éxito sin él.
fuente
Golang - 68
Soy nuevo en Go y tampoco estoy seguro de las reglas para contar caracteres en este idioma aquí.
Importaciones (11 bytes):
Función (55 bytes):
Puedes ejecutarlo aquí .
fuente
C # nunca ganará este tipo de preguntas, pero aquí hay una prueba, completamente sin codificación. :)
C # - 84
fuente
x=>String.Join(" ",x.Select(y=>Convert.ToString(y,2)));
Sin embargo, tenga en cuenta que, debido al uso.Select()
, tanto esta respuesta más corta como su respuesta original, deben incluir los 18 bytes, ausing System.Linq;
menos que especifique que está usando el compilador interactivo de Visual C # , que importa System.Linq por defectoCobra - 64
Como una lambda:
fuente