Pegue uma sequência de caracteres binários separados por um espaço e converta-a em uma sequência ASCII.
Por exemplo...
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100
Seria convertido para ...
Hello World
A cadeia binária será armazenada em uma variável chamada s
.
Este é um desafio do código-golfe, por isso a solução mais curta vence.
ZX81
aquiRespostas:
Ruby,
3632Ou 31
Otimizações graças a Chron
fonte
.join""
por*""
salvar alguns caracteres. Você também pode fazer isso com gsub em vez de split + map + join, algo como:s.gsub(/\w+ ?/){$&.to_i(2).chr}
(31 caracteres).s.gsub(/\d+./){$&.to_i(2).chr}
funciona e é 30 caracteres, não tenho idéia do por que funciona. O.
não deve corresponder da última vez, mas corresponde.JavaScript (ES6) 49
55 56 64Editar Aceitando a sugestão @bebe - obrigado
Edit2 Não sabia sobre literal numérico binário - obrigado @kapep
Edit3 Wow 6,
não 4bytes salvos thx @ETHproductionsExplicação conforme solicitado nos comentários
String.replace
pode levar 2 argumentos:/\d+./g
: um ou mais dígitos seguidos por um caractere diferente - o sinalizador g especifica para pesquisar o padrão mais de uma vezVale ressaltar que no final da string o regexp corresponde à sequência de dígitos sem um espaço à direita, nesse caso o ponto corresponde ao último dígito. Tente '123'.match (/ (\ d +) ./) para verificar.
(Ainda) um dos mais detalhados trechos de javascript de todos os tempos ...
(atribuição à string s não contada)
fonte
s.replace(/\d+./g,x=>String.fromCharCode(parseInt(x,2)))
56s.replace(/\d+./g,x=>String.fromCharCode(eval("0b"+x)))
55/\d+./g,x=>
faz?eval('0b'+x)
para'0b'+x-0
salvar 4 bytes.Bash + utilitários linux comuns, 25 bytes
explicação dc
m
para:m
macro se a pilha não estiver vaziam
registrarComo colocamos a string binária inteira na pilha primeiro, quando exibimos cada valor, terminamos com a string invertida. Então, usamos o
rev
utilitário para corrigir isso.Exemplo de uso:
fonte
PowerShell, 49
EDIT: Não encontrou a outra resposta do PowerShell. Mas existe essencialmente apenas uma maneira de resolver isso.
fonte
C -
574338/31Versão de 38 bytes:
Ou apenas 31 bytes se s for um ponteiro:
Eu não acho que é exatamente assim que o loop for e while deve ser usado ... mas funciona.
fonte
Pyth , 12
Observe que s não é uma variável legal em Pyth, então usei Z em vez disso.
Explicação:
Exemplo:
fonte
id2
no lugar dev+"0b"d
? De qualquer forma, isso é ilegível e legal.código de máquina x86 no DOS - 22 bytes
Como não existem variáveis de string reais no código da máquina (e, em particular, nenhuma variável chamada "
s
"), decidi pelo stdin como entrada.Entrada NASM:
fonte
Powershell (
5249)Loop simples sobre string binária em $ s. Ter que incluir o [convert] mata minha pontuação.
Edição: Existe realmente apenas uma maneira de conseguir isso em Powershell, wowie. Joey e eu tivemos a mesma resposta trabalhando de forma independente!
Entrada:
Saída:
fonte
Mathematica, 52 bytes
Ah, os adoráveis nomes de funções do Mathematica
fonte
Perl
3332Edit: Solução atualizada, 32.
Solução anterior (33):
ou
Teste:
fonte
J (23)
Teste:
Explicação:
fonte
Golfscript - 21
Você pode testá-lo aqui .
fonte
Python shell
4440 caracteresObrigado pela ajuda Griffin .
fonte
APL (15)
Teste:
Explicação:
⍎s
: avaliars
, transformando-o em uma matriz de números inteiros. As matrizes são escritas como números separados por espaços, portanto, isso é divididos
.{
...}¨
: para cada elemento:⍕⍵
: transformar o número novamente em uma sequência⍎¨
: avalie cada dígito individual, fornecendo uma sequência de bits2⊥
: decodificação base-2, fornecendo os números⎕UCS
: obtém o caractere para cada númerofonte
PHP (61)
fonte
foreach(str_split($s,8)as$v)echo chr(bindec($v));
str_split($s,8)
, não funcionará.foreach(explode(' ',$s)as$v)echo chr(bindec($v));
seria válido, mas não pretendo editar uma das minhas primeiras respostas do PPGC que claramente não é realmente um jogo de golfe. Obrigado mesmo assim!Baco , 25 bytes
Explicação:
S,' 'j
divida a String S pelo espaço vazio e a converta em um bloco (algum tipo de matriz).:A=
obter o bloco anterior e atribuí-lo a uma variável.(),A¨
para cada elemento em AÖ,2,10b
Leia o elemento atual (represente porÖ
) na base 2 e transforme-o na base 10.:c
obtenha o valor anterior e imprima como charfonte
GolfScript 23
Teste online aqui .
fonte
C - 63
como C não possui conversor de base 2 na biblioteca padrão: teste aqui
edite: existe, eu sou burra demais para saber sobre isso
fonte
Brainfuck codificado em comprimento de execução, 49 bytes
Como não existem variáveis no Brainfuck, apenas usei entrada e saída padrão.
O código
32+
deve ser interpretado como 32+
s pelo intérprete. Apenas substitua-os manualmente se o seu intérprete não suportar RLE.Versão expandida (não RLE): (91 bytes)
O código assume que o EOF é codificado como 0.
Explicação
O seguinte layout é usado:
Onde
x
está o byte ASCII a ser impresso,a
é o caractere a da entrada padrão eflag
é 1 se houvera
um espaço.fonte
Java 8: 60 bytes
Usando lambdas no Java 8 (75 bytes):
E se você permitir importações estáticas (usadas por alguns aqui), é (61 bytes):
Uma versão um pouco mais curta usando o loop for (60 bytes):
fonte
Clojure 63 (ou 57)
O implemento all-Clojure:
Com interoperabilidade Java:
Sessão REPL:
fonte
QBasic, 103
O que? Não temos funções sofisticadas de binário para decimal aqui. Faça Você Mesmo!
Estou contando a nova linha (que acho necessária para obter o if-then-else sem um
END IF
) como um byte, por esta meta postagem . Não sei se o QB64 no Windows aceitaria um arquivo de código dessa maneira ou não. Provavelmente não importa muito.fonte
NodeJS – 62
PHP – 75
fonte
JavaScript 111
This does the number conversion without parseInt or eval. Reading the string backwards and counting bits it set's bit x if it's a one. When a space is found a the number is converted to a char and a new 0 number is started for setting bits.
fonte
Groovy 64
fonte
CJam, 11 bytes
s isn't a legal variable name in CJam, so I chose N instead.
Try it online.
Example run
How it works
fonte
Haskell -- 48 (+13 imports (?))
Here's my first golf attempt in Haskell.
You need to import Data.Char
usage (in ghci):
Explanation:
fonte
GNU Sed, 19 bytes
Inspired by an excellent @Digital Trauma answer.
Golfed
Test
fonte
Pyth, 7 bytes (non-competing)
Takes input as string.
Try it!
fonte
05AB1E, 4 bytes (non-competing)
Saved 3 bytes thanks to @Emigna
Try it online!
fonte
#CçJ
also works. Although in both this and your version you needð¡
instead of#
if the input can be only 1 char.