Tome una cadena de caracteres binarios separados por un espacio y conviértalo en una cadena ASCII.
Por ejemplo...
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100
Se convertiría a ...
Hello World
La cadena binaria se almacenará en una variable llamada s
.
Este es un desafío de código de golf, por lo que gana la solución más corta.
ZX81
aqui.Respuestas:
Rubí,
3632O 31
Optimizaciones gracias a Chron
fuente
.join""
por*""
guardar algunos caracteres. También puede hacerlo con gsub en lugar de dividir + mapa + unirse, algo como:s.gsub(/\w+ ?/){$&.to_i(2).chr}
(31 caracteres).s.gsub(/\d+./){$&.to_i(2).chr}
funciona y son 30 caracteres, aunque no tengo idea de por qué funciona. No.
debería coincidir con la última vez, pero sí.JavaScript (ES6) 49
55 56 64Editar Aceptando @bebe sugerencia - gracias
Edit2 No sabía acerca del literal numérico binario - gracias @kapep
Edit3 Wow 6
no 4bytes guardados thx @ETHproductionsExplicación según lo solicitado en los comentarios
String.replace
puede tomar 2 argumentos:/\d+./g
: uno o más dígitos seguidos de un carácter diferente: el indicador g especifica que busque el patrón más de una vezVale la pena señalar que al final de la cadena la expresión regular coincide con la secuencia de dígitos sin un espacio final, en este caso el punto coincide con el último dígito. Prueba '123'.match (/ (\ d +) ./) para verificar.
(Aún así) una de las piezas más detalladas de javascript jamás ...
(La asignación a la cadena s no cuenta)
fuente
s.replace(/\d+./g,x=>String.fromCharCode(parseInt(x,2)))
56s.replace(/\d+./g,x=>String.fromCharCode(eval("0b"+x)))
55/\d+./g,x=>
hace?eval('0b'+x)
a'0b'+x-0
ahorrar 4 bytes.Bash + utilidades comunes de Linux, 25 bytes
explicación dc
m
para:m
macro si la pila no está vacíam
registrarseDebido a que primero empujamos toda la cadena binaria a la pila, cuando sacamos cada valor, terminamos con la cadena invertida. Entonces usamos la
rev
utilidad para corregir eso.Ejemplo de uso:
fuente
PowerShell, 49
EDITAR: No vi la otra respuesta de PowerShell. Pero esencialmente solo hay una forma de resolver esto.
fuente
C -
574338/31Versión de 38 bytes:
O solo 31 bytes si s es un puntero:
No creo que esto sea exactamente cómo se supone que se debe usar el ciclo while y while ... pero funciona.
fuente
Pyth , 12
Tenga en cuenta que s no es una variable legal en Pyth, por lo que usé Z en su lugar.
Explicación:
Ejemplo:
fuente
id2
en lugar dev+"0b"d
? En cualquier caso, esto es ilegible y genial.Código de máquina x86 en DOS: 22 bytes
Como no hay variables de cadena reales en el código de máquina (y en particular, no hay variables llamadas "
s
"), me decidí por stdin como entrada.Entrada NASM:
fuente
Powershell (
5249)Bucle simple sobre cadena binaria en $ s. Sin embargo, tener que incluir el [convertir] mata mi puntaje.
EDITAR: Realmente solo hay una forma de lograr esto en Powershell, wowie. ¡Joey y yo obtuvimos casi la misma respuesta trabajando independientemente!
Entrada:
Salida:
fuente
Mathematica, 52 bytes
Ah, los bonitos nombres de funciones de Mathematica
fuente
Perl
3332Editar: Solución actualizada, 32.
Solución anterior (33):
o
Prueba:
fuente
J (23)
Prueba:
Explicación:
fuente
Golfscript - 21
Puedes probarlo aquí .
fuente
Python shell
4440 caracteresGracias por la ayuda Griffin .
fuente
APL (15)
Prueba:
Explicación:
⍎s
: evaluars
, convirtiéndolo en una matriz de enteros. Las matrices se escriben como números separados por espacios, por lo que esto se divides
.{
...}¨
: para cada elemento:⍕⍵
: convierte el número de nuevo en una cadena⍎¨
: evalúa cada dígito individual, dando una cadena de bits2⊥
: decodificación base-2, dando los números⎕UCS
: obtener el carácter para cada númerofuente
PHP (61)
fuente
foreach(str_split($s,8)as$v)echo chr(bindec($v));
str_split($s,8)
lo tanto , no funcionará.foreach(explode(' ',$s)as$v)echo chr(bindec($v));
sería válido, pero no planeo editar una de mis primeras respuestas de PPGC que, de todos modos, claramente no se juega al golf. ¡Gracias de todos modos!Baco , 25 bytes
Explicación:
S,' 'j
divide la Cadena S por el espacio vacío y la convierte en un bloque (algún tipo de matriz).:A=
obtener el bloque anterior y asignarlo a una variable.(),A¨
para cada elemento en AÖ,2,10b
Lee el elemento actual (representado porÖ
) en la base 2 y transfórmalo en la base 10.:c
obtener el valor anterior e imprimir como charfuente
GolfScript 23
Prueba en línea aquí .
fuente
C - 63
ya que C no tiene un convertidor de base 2 en la biblioteca estándar: prueba
editar aquí : hay, soy demasiado estúpido para saberlo
fuente
Longitud de ejecución codificada Brainfuck, 49 bytes
Como no hay variables en Brainfuck, solo utilicé la entrada y salida estándar.
El
32+
intérprete debe interpretar el código como 32+
s. Simplemente reemplácelos manualmente si su intérprete no admite RLE.Versión ampliada (no RLE): (91 bytes)
El código supone que EOF está codificado como 0.
Explicación
Se utiliza el siguiente diseño:
Dónde
x
se imprimirá el byte ASCII,a
es el carácter de la entrada estándar yflag
es 1 sia
fuera un espacio.fuente
Java 8: 60 bytes
Usando lambdas en Java 8 (75 bytes):
Y si permite las importaciones estáticas (que algunos usan aquí) es (61 bytes):
Una versión un poco más corta que usa for loop (60 bytes):
fuente
Clojure 63 (o 57)
El todo-Clojure implica:
Con interoperabilidad Java:
Sesión REPL:
fuente
QBasic, 103
¿Qué? No tenemos funciones elegantes de binario a decimal aquí. ¡Hazlo tu mismo!
Estoy contando la nueva línea (que creo que es necesaria para obtener el if-then-else sin un
END IF
) como un byte, según esta meta publicación . No sé si QB64 en Windows aceptaría un archivo de código de esa manera o no. Probablemente no importa mucho.fuente
NodoJS - 62
PHP - 75
fuente
JavaScript 111
Esto hace la conversión de número sin parseInt o eval. Al leer la cadena hacia atrás y contar los bits, establece el bit x si es uno. Cuando se encuentra un espacio, el número se convierte en un carácter y se inicia un nuevo número 0 para establecer bits.
fuente
Maravilloso 64
fuente
CJam, 11 bytes
s no es un nombre de variable legal en CJam, así que elegí N en su lugar.
Pruébalo en línea.
Ejecución de ejemplo
Cómo funciona
fuente
Haskell - 48 (+13 importaciones (?))
Aquí está mi primer intento de golf en Haskell.
Necesitas importar datos.
uso (en ghci):
Explicación:
fuente
GNU Sed, 19 bytes
Inspirado por una excelente respuesta @Digital Trauma.
Golfed
Prueba
fuente
Pyth, 7 bytes (no competitivos)
Toma la entrada como cadena.
¡Intentalo!
fuente
05AB1E , 4 bytes (no competitivos)
Guardado 3 bytes gracias a @Emigna
Pruébalo en línea!
fuente
#CçJ
También funciona. Aunque tanto en esta como en su versión, necesita enð¡
lugar de#
si la entrada puede ser solo 1 carácter.