Converta um número hexadecimal (de qualquer tamanho) em um número binário.
Insira
um número hexadecimal POSITIVO com a 0x
no início. A entrada válida sempre coincidir com o seguinte regex: 0x[0-9a-fA-F]+
. Se a entrada não for um número hexadecimal válido, ou seja, qualquer coisa que não corresponda a esse regex, a saída deverá ser 0
.
Saída
O hexadecimal convertido em binário.
Vencendo as
Regras Originais de Código-Golfe, Menor quantidade de mordidas (bytes)
.
Exemplos
IN: 0x12
OUT: 10010
IN: 0xFF
OUT: 11111111
IN: 0XFF
OUT: 0
IN: #0ac4
OUT: 0
IN: 0x00101011
OUT: 100000001000000010001
IN: 0x525600
OUT: 10100100101011000000000
IN: 0x58f70555118ec400
OUT: 101100011110111000001010101010100010001100011101100010000000000
IN: 0x6669795966AF3000
OUT: 110011001101001011110010101100101100110101011110011000000000000
IN: 0b018474
OUT: 0
IN: 9577383
OUT: 0
IN: -483355
OUT: 0
IN: -0xf9ad92
OUT: 0
code-golf
base-conversion
Hashim Kayani
fonte
fonte
#0ac4
Ainda é um caso de teste válido?X
está em maiúsculas).00011010
Respostas:
Pitão, 15 bytes
Explicação:
Suíte de teste
Com um esclarecimento de regras (que
0x
deve estar em minúsculas) no OP, você pode removerr0
por 13 bytes.fonte
Python 2,
67626059 bytesExperimente online!
Versão que erros na entrada inválida (27 bytes):
Experimente online!
fonte
05AB1E , 11 bytes
Experimente online!
Explicação
fonte
0XFF
.0x
então eu diria que o caso de teste específico está errado.Å?
ou 10 bytes ainda usando o legado .Lote, 402 bytes
Recebe entrada em STDIN. Em seguida, 8 linhas são desperdiçadas principalmente na validação de entrada; portanto, as linhas interessantes são a linha 11, que substitui cada dígito hexadecimal pelo seu equivalente binário, mas devido às limitações do Lote, com uma
.
linha inicial 12, que exclui todos os se.
14 , que remove os 0s iniciais. No entanto, isso falha em entradas como0x0
essa, e eu "invalido" aquelas que significam que 0 é emitido.fonte
PHP,
66 6563 bytescorrer como tubo com
-F
.Sem o
0x
, o pior problema seria que tantohexdec
ebase_convert
simplesmente ignorar caracteres que não são hex; mas com isso, deve haver uma verificação de validade explícita de qualquer maneira.45 bytes sem o
0x
:fonte
echo stristr($a=$argn,"0X")==$a?decbin(hexdec(ltrim($a,Xx0))):0;
Esta é uma boa alternativa? Ele deve trabalhar para os casos de teste dadashexdec
ebase_convert
).echo decbin(hexdec(preg_filter("#^0x([a-f\d]+$)#i","$1",$argn)));
<?=
istead deecho
com opção -FJavaScript (ES6),
109108 bytesFunciona para qualquer tamanho de entrada.
Casos de teste
Mostrar snippet de código
fonte
0x1fffffffffffff
- akaNumber.MAX_SAFE_INTEGER
- e retorna resultados arredondados além disso. Por sorte, os dois grandes casos de teste são arredondados corretamente.1
bits no resultado. A propósito, você precisa$
do primeiro regexp?$
. A idéia é obter o zero final, se não houver1
resultado no resultado.REXX, 45 bytes
fonte
Retina , 149 bytes
(observe a nova linha à direita)
Experimente online!
Aqui está uma solução alternativa ao custo de 7 bytes: Experimente!
fonte
perl, 25
(código 24 + 1 sinalizador -n)
fonte
JavaScript (ES6),
116111 bytesNão limitado a 53 bits de precisão. Editar: salvei 5 bytes reescrevendo minha conversão de dígito, o que também reduz meus requisitos de idioma para ES6.
fonte
0x00101011
, desculpe.Código de máquina 8086 - 63 bytes
Funciona para qualquer entrada até 125 caracteres (o comprimento máximo da linha de comando no DOS)
fonte
JavaScript (ES6),
535249505245 bytes(Não concorrente, pois não lida com entradas de qualquer tamanho; eu tive sorte com as entradas de amostra)
fonte
CJam , 24 bytes
Experimente online!
Explicação
fonte
JavaScript (ES6), 107 caracteres
fonte
Perl 6 , 35 bytes
fonte
Javascript, 63 bytes
fonte