Este é um desafio de código de golfe. Assim como o título diz, escreva um programa para ocultar uma sequência de caracteres ascii em binário.
Por exemplo:
"Hello World!"
deve se transformar
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100 100001
.
Nota: Estou particularmente interessado em uma implementação de pyth.
code-golf
string
binary
conversion
ericmarkmartin
fonte
fonte
Respostas:
CJam, 8 bytes
Mole-mole:
Experimente aqui
fonte
Python 3, 41 bytes
Como a resposta do KSFT , mas pensei em apontar que, além de
raw_input -> input
, o Python 3 também tem uma vantagem aqui devido ao splat forprint
.fonte
Pitão, 10 bytes
Mapeamento e explicação do Python:
Entrada é a sequência que precisa ser convertida sem as aspas.
Experimente aqui
fonte
Psum(d).append(Pfilter(lambda T:gte(head(join(Plen(k),Plen())))))
, d = '' ek = ''. Então não, não é válido.Python 3-43 bytes
Não é o mais curto, mas uma abordagem interessante IMO. Tem a vantagem adicional de que, se o número de bits significativos variar, por exemplo
Hi!
, o preenchimento com zeros é trivial (mais 2 bytes, em oposição a 9 para.zfill(8)
):fonte
Python - 52
Vou trabalhar na tradução para Pyth.Alguém já respondeu Pyth.Se você não se importa com o programa completo ou com o formato de E / S e usa o Python 3, pode fazê-lo em 23 bytes como este:
x
é a entrada.Sei que isso não conta porque o intérprete não foi lançado antes do lançamento do desafio, mas aqui está no KSFTgolf:
fonte
Ruby,
342824 bytesRecebe entrada via STDIN. 6 bytes salvos obrigado por AShelly e outros 4 graças a britishtea.
fonte
$<.each_byte{|c|$><<"%b "%c}
String#bytes
vez deString#each_byte
. O formulário do bloco foi descontinuado, mas ainda funciona :) #PowerShell,
635946 bytes-13 bytes graças a @mazzy
Experimente online!
fonte
Matlab
Esta é uma função anônima
uso é
f('Hello World')
.Como alternativa, se
x
for definida como a sequênciaHello World!
no espaço de trabalho, apenasdec2bin(char(x))
funcionará.fonte
char
? Eu acho que você quer dizerdec2bin(x)-'0'
char(x)
quandox
já é uma string, não faz nada. Então você pode removê-lo para economizar espaço. Por outro lado, o resultadodec2bin
é uma string, e eu acho que a saída deve ser númerosJ - 9
Não faço ideia de como fazer isso em uma linha sem dobrar o comprimento do código, preciso que os gurus J me digam :)
fonte
".
ao início. Ele avalia o resultado para que fique em uma linha e separado por espaços. Ainda mais curto é criar Base10 números com os dígitos base2:10#.#:3&u:
.Java - 148 bytes
Editado para incluir o arquivo completo
fonte
for(char c:a[0].toCharArray()){
ou mesmofor(byte b:a[0].getBytes()){
uma vez que a entrada é ASCII, assumindo uma localidade máquina não-utf-16public
e encurtar o nome do programa para um único caractere para obter mais bytes. Além disso,(String[]a)
é perfeitamente aceito pelo compilador, ganhando outro byte.JavaScript ES6, 63
65bytesIsso é bastante longo, graças aos nomes de funções longos do JavaScript. O snippet de pilha abaixo é o equivalente aproximado do ES5, portanto pode ser executado em qualquer navegador. Agradecimentos a edc65 pelas melhorias no golfe.
fonte
[for of]
é um pouco mais curto do[...].map
que enumerar caracteres em strings:alert([for(c of prompt())c.charCodeAt().toString(2)].join(' '))
.join(' ')
por.join` `
. Você pode golfe fora de um monte de bytes usando uma função em vez deprompt
/alert
Scala -
59- 55 bytesNormalmente, deve-se usar foreach e não mapear.
fonte
Código de máquina 8088, IBM PC DOS,
3331 bytes *Listagem:
Arquivo COM executável completo para PC DOS, a entrada é via linha de comando.
Com zeros à esquerda:
Faça o download e teste o ASCBIN.COM .
Ou 39 bytes sem zeros à esquerda:
Faça o download e teste o ASCBIN2.COM .
* Como não estava explicitamente claro se os zeros à esquerda são permitidos ou não, estou publicando versões nos dois sentidos.
fonte
MITS Altair 8800 , 0 bytes
A sequência de entrada está no endereço de memória
#0000H
( permitido ). Saída em binário via luzes de E / S do painel frontalD7-D0
.Exemplo, faça
RESET
, então,EXAMINE
para ver o primeiro byte, seguido pela repetiçãoEXAMINE NEXT
para ver o restante."H" = 01 001 000:
"e" = 01 100 101:
"l" = 01 101 100:
Experimente online!
Não competindo, é claro. :)
fonte
Haskell, 65
uso intenso da mônada da lista. não pôde ser convertido em compreensões de lista porque as últimas instruções não eram a
return
.fonte
C ++ - 119 bytes
Liberando memória? O que é isso?
(MSVC compila o código com aviso)
fonte
main(int c,char**v){char x[9];for(;c=*(v[1]++);printf("%s ",itoa(c,x,2)));}
Geléia , 3 bytes
Experimente online!
fonte
Tcl , 52 bytes
Experimente online!
fonte
binary scan [join $argv] B* b;puts [regsub -all .{8} $b {& }]
APL (Dyalog) , 12 bytes
Experimente online!
Agradecemos a Adám pela ajuda com esta solução.
fonte
Python 3.6 , 39 bytes
Experimente online!
fonte
Commodore VIC-20 / C64 / 128 e TheC64Mini, 101 bytes BASIC tokenizados
Aqui está a lista ofuscada usando as abreviações de palavras-chave do Commodore BASIC:
Aqui, para fins de explicação, está a lista simbólica não ofuscada:
A função
fn b
declarada na linha zero aceita um parâmetro numérico dox
qual éAND
ed com o valor deb
; O SGN é então usado para converterx and b
para1
ou0
.A linha um aceita uma entrada de string para a variável
a$
e o loop inicia (indicado comi
) para o comprimento dessa entrada.b
representa cada bit do 6º ao 0º bit.c$
leva cada caractere da string na posiçãoi
.a linha 5 inicia o loop para testar cada posição de bit;
right$
é usado na linha 6 para remover um problema de formatação automática quando o Commodore BASIC exibe um número, convertendo a saída defn b
em uma string;asc(c$)
converte o caractere atual em seu código ascii como um valor decimal.A linha 7 representa o próximo valor de bit. O loop
j
é finalizado antes de imprimir um espaço, e o último loopi
é finalizado.fonte
JavaScript ES6, 71 bytes
fonte
.split('')
dividir a sequência vazia;.split()
se"abc"
transforma["abc"]
.Quarto (gforth) , 45 bytes
Experimente online!
Código Explicação
fonte
Ruby, 24 bytes
Eu esperava vencer Martin Ender , mas só consegui amarrá-lo.
Recebe entrada em STDIN; +1 bytes para
-p
sinalizador.Experimente online!
fonte
Gaia , 4 bytes
Muito feliz com isso
Como funciona
Experimente Online!
fonte
Python 3 , 39 bytes
Experimente online!
Ligeira melhoria em relação à atual resposta líder em Python
fonte
STATA 158
Eu usei uma abordagem diferente da maioria. Leia através do prompt _request () do display (abreviado para di _r (r)). Escreva a string em um arquivo chamado b no modo de texto. Abra b no modo binário e leia cada caractere como um byte e converta para binário. Tecnicamente, o arquivo b deve ser fechado no final, mas é um programa válido e é executado com sucesso sem ele.
fonte
Golang - 68
Eu sou novo no Go e também não tenho certeza das regras para contar caracteres nesse idioma.
Importações (11 bytes):
Função (55 bytes):
Você pode executá-lo aqui .
fonte
O C # nunca vencerá esse tipo de perguntas, mas aqui está uma tentativa, completamente sem codificação. :)
C # - 84
fonte
x=>String.Join(" ",x.Select(y=>Convert.ToString(y,2)));
No entanto, observe que, devido ao uso de.Select()
, tanto a resposta mais curta quanto a resposta original precisam incluir os 18 bytes, ausing System.Linq;
menos que você especifique que está usando o Visual C # Interactive Compiler , que importa o System.Linq por padrãoCobra - 64
Como um Lambda:
fonte