Dado um número inteiro binário inclusive entre 0
e 1111111111111111
(ou seja, um número inteiro não assinado de 16 bits) como entrada, produza o mesmo número inteiro em negabinário .
A entrada pode estar no formato que for mais conveniente para o seu idioma; por exemplo, se for mais fácil para o programa manipular entradas com 16 dígitos, como 0000000000000101
, em vez de simplesmente 101
, você pode escrever o programa para aceitar apenas entradas dessa maneira.
E / S de amostra
> 1
1
> 10
110
> 1010
11110
> 110111001111000
11011001110001000
> 1001001
1011001
Aqui está um exemplo de programa que escrevi que baseia conversões, incluindo bases negativas e não inteiras. Você pode usá-lo para verificar seu trabalho.
code-golf
binary
base-conversion
Peter Olson
fonte
fonte
0
s e1
s. Looks claro para mim, mas uma resposta me faz duvidar de ânimo leve ...Respostas:
APL, 21 caracteres
Eu usei o Dyalog APL para isso, com
⎕IO
definido como 0, permitindo indexar matrizes começando em 0 em vez de 1.Explicação, da direita para a esquerda:
⍞
nos fornece a entrada do usuário como um vetor de caracteres.⍎¨
aplica a função de execução (⍎
) a cada (¨
) dos caracteres acima mencionados, resultando em um vetor de números inteiros 1 e 0.2⊥
decodifica o vetor da base 2 em decimal.-
nega o número inteiro decimal resultante.(16/¯2)⊤
codifica o número inteiro decimal na base¯2
(negativo 2). (16/¯2
replica¯2
,16
vezes, produzindo 16 dígitos em nosso número negativo).-
nega cada elemento do nosso número recém-codificado (antes disso, consiste em -1 e 0), para que possamos usá-lo para indexar nosso vetor de caracteres.'01'[ ... ]
indexa a matriz de caracteres ('01'
) usando os 0 e 1 do vetor negabinário negado. É assim que obtemos uma saída mais bonita.Exemplo:
fonte
Ruby,
3231 caracteresUsa o atalho de cálculo negativo .
fonte
gets
palavra - chave, que busca STDIN.GolfScript,
342927 caracteresUma abordagem simples e direta. É bastante interessante que a versão mais curta seja a que primeiro se converte em número e depois volte para a base -2 (pelo menos a versão mais curta que eu poderia encontrar até agora). Mas o bom deste é que ele contém quase 15%
%
.Edit 1: Para a base 2, podemos salvar uma operação de módulo e também juntar os dois loops.
Edit 2: Encontrei um código ainda mais curto para converter string binária em número inteiro.
fonte
Haskell,
8683 bytesChame usando ce depois uma matriz inteira para dígitos, por exemplo
PS: Sou novo, enviei isso corretamente?
Edição: salvou alguns bytes graças a Laikoni e também corrigiu alguns erros de digitação
EDIT2: Como alternativa, c :: String -> String:
Para 114 bytes (mas você o chama com uma sequência: c "11")
fonte
undigits 2 n
, porque o aplicativo de função se liga mais forte que o+m
. Você também pode salvar alguns bytes através da ligaçãom
em um guarda:c n|m<-0xAAAAAAAA= ...
.Python (2.x), 77 caracteres
(não tão curto quanto as outras soluções devido à necessidade de alternar manualmente a base ...) Deve atender aos requisitos.
Sugestões para melhorias adicionais são bem-vindas!
Alimente-o com valores iniciais como este:
0b1001001
fonte
JavaScript, 68 bytes
Seriam 52 bytes no ES6, mas isso posterga o desafio:
fonte
Geleia , 4 bytes, desafio pós-datas de idiomas
Experimente online!
Recebe entrada e produz saída como uma lista de dígitos.
Explicação
Isso é basicamente apenas uma tradução direta da especificação.
fonte
k, 17 bytes não-concorrentes
Alguns dos recursos usados provavelmente pós-datam o desafio.
A entrada é uma lista de 1 e 0 e a saída também é uma lista de 1 e 0.
fonte
PHP, 69 bytes
Versão Online
fonte
ES8, 54B
fonte
05AB1E , 4 bytes
Experimente online!
fonte
Japonês , 4 bytes
Entrada como uma seqüência de caracteres binária, saída como uma matriz de dígitos negativos.
Tente
Ou, recebendo a entrada como uma matriz de dígitos binários:
Tente
fonte