Então você recebe um número POSITIVO de base 10 (decimal). Seu trabalho é reverter os dígitos binários e retornar esse número base 10.
Exemplos:
1 => 1 (1 => 1)
2 => 1 (10 => 01)
3 => 3 (11 => 11)
4 => 1 (100 => 001)
5 => 5 (101 => 101)
6 => 3 (110 => 011)
7 => 7 (111 => 111)
8 => 1 (1000 => 0001)
9 => 9 (1001 => 1001)
10 => 5 (1010 => 0101)
Este é um desafio do código-golfe , portanto, a solução que usa menos bytes vence.
Este é o A030101 no OEIS.
code-golf
number
base-conversion
binary
juniorRubyist
fonte
fonte
Respostas:
Python , 29 bytes
Experimente online!
Esta é uma função anônima e sem nome que retorna o resultado.
Primeiro,
bin(n)
converte o argumento em uma cadeia de caracteres binária. Normalmente, reverteríamos isso com a notação de fatia[::-1]
. Isso lê a string com um passo de -1 , ou seja, para trás. No entanto, cadeias binárias em Python são prefixadas com an0b
e, portanto, damos o segundo argumento do fatiamento como 1 , dizendo ao Python para ler para trás, terminando no índice 1 , não lendo os índices 1 e 0 .Agora que temos a string binária reversa, passamos para
int(...)
a segunda com o segundo argumento como 2 . Isso lê a sequência como um número inteiro base 2, que é implícito retornado pela expressão lambda.fonte
Python, 29 bytes
Experimente online
fonte
JavaScript (ES6),
3028 bytesGuardado 2 bytes graças a @Arnauld
Isso basicamente calcula o inverso um bit de cada vez: Começamos com q = 0 ; enquanto n for positivo, multiplicamos q por 2, separamos o último bit de n com
n>>1
e o adicionamos a q com|n%2
. Quando n atinge 0, o número foi revertido com sucesso e retornamos q .Graças aos longos nomes internos de JS, resolver esse desafio da maneira mais fácil leva 44 bytes:
Usando recursão e uma string, você pode obter uma solução de 32 bytes que faz a mesma coisa:
fonte
f=(n,q)=>n?f(n>>1,q*2|n%2):q
quase funciona. Mas infelizmente nãon=0
.Java 8,
53474645 bytesEsta é uma expressão lambda que tem o mesmo princípio que a resposta da ETH (embora a recursão tenha sido muito detalhada em Java, então fazemos um loop):
Experimente online!
Isso pode ser atribuído com
IntFunction<Integer> f = ...
e depois chamado comf.apply(num)
. Expandido, não destruído e comentado, fica assim:fonte
t*2
vez de(t<<1)
, mais um movendo esse cálculo da cabeça do loop para o corpo do loop. Você pode usar emx
vez dex>0
para a condição?x>>=1
pode ser substituído porx/=2
, pois será automaticamente uma divisão inteira.t=t*2+
parat+=t+
.)J, 6 bytes
|.
marcha ré&.
sob#:
base 2fonte
Gelatina , 3 bytes
Experimente online!
fonte
Mathematica, 19 bytes
fonte
Labirinto, 23 bytes
Bem, isso é estranho ... isso retorna o número BINÁRIO reverso ... Obrigado @ Martin Ender por apontar tanto o meu bug quanto o meu ID 10T. Portanto, isso não funciona, vou ter que encontrar outra solução.
fonte
# Labyrinth, 89 bytes
_
estão nos cruzamentos.C,
48444342 bytes-1 byte graças a gurka e -1 byte graças a anatolyg:
Solução anterior de 44 bytes:
Solução anterior de 48 bytes:
Ungolfed e uso:
fonte
r
Já não foi inicializado com zero aquir;f(n){r=0;
, por exemplo, or=0;
é desnecessário? Também erro de digitação menor: " Solução anterior de 48 bytes"for
loops são sempre pelo menos tão curtos quanto oswhile
loops, e geralmente mais curtos.r;f(n){for(r=n&1;n/=2;r=2*r+n%2);return r;}
:? 1 byte mais curto, mas não tenho certeza se é válido C (C99).=
para+=
torná-lo mais curto e mais ofuscadoRuby,
2928 bytes"% b"% n formata a entrada n como uma sequência binária, inverta e depois converta novamente em um número
Casos de uso / teste:
fonte
2
é a base para a qual ele está convertendo en
é a entrada.->args{return value}
é a sintaxe rubi lambda.to_i(2)
?05AB1E , 3 bytes
Experimente online!
fonte
Java (OpenJDK) , 63 bytes
Experimente online!
Graças a cutucar por -12 bytes e Cyoce por -8 bytes!
fonte
a
neste contexto)print
em vez deprintln
para o golfe :)StringBuffer
salva um byte sobreStringBuilder
+""
vez de.toString()
?Perl 6 , 19 bytes
fonte
$_
. Não é mencionado pelo nome, mas obase
método é chamado.{:2(.base(2).flip)}(10)
no REPL imprimirá 5. Portanto, ele atende aos critérios de código-golfe padrão de uma função.Haskell, 36 bytes
O mesmo algoritmo (e comprimento!) Da resposta JavaScript da ETHproductions .
fonte
Utilitários Bash / Unix,
2423 bytesExperimente online!
fonte
PHP, 33 bytes
converter para base2, string reversa, converter para decimal. Salve em arquivo e execute como pipe com
-F
.sem builtins:
iterativo, 41 bytes
Enquanto a entrada tiver definido os bits, saia um pouco da entrada e empurre-a para a saída. Corra como cano com
-nR
.recursivo, 52 bytes
fonte
$r+=$r
. Mas na verdade não me lembro por que coloquei isso na frente.MATL , 4 bytes
Experimente online!
Explicação
fonte
Pitão, 6 bytes
Conjunto de testes disponível aqui.
Explicação
fonte
Japt , 5 bytes
Experimente Online!
fonte
)
poderia ser um espaço :-)Scala, 40 bytes
Uso:
Explicação:
fonte
Mathematica, 38 bytes
fonte
Groovy, 46 bytes
fonte
it
refere-se ao argumento dado a um blocoCJam , 8 bytes
Experimente online!
Explicação
fonte
Lote, 62 bytes
Explicação: Na primeira passagem,
%1
contém o parâmetro de entrada enquanto%2
está vazio. Portanto, avaliamos an
metade%1
er
o+%1
módulo 2 (o%
operador deve ser duplicado para citá-lo). Sen
não for zero, nos chamamos de passagem recursiva de caudan
e uma expressão que é avaliada na próxima passagem dobrando efetivamente ar
cada vez.fonte
C #, 98 bytes
fonte
R, 55 bytes
Lê a entrada do stdin e, consequentemente, usa a
bin
função domiscFuncs
pacote para converter de decimal em um vetor binário.fonte
Pushy , 19 bytes
Nenhuma conversão básica embutida!
Experimente online!
Pushy tem duas pilhas, e esta resposta faz uso extensivo disso.
Existem duas partes e dois neste programa. Primeiro,
$&2%v2/;F
converte o número em sua representação binária reversa:Dado o exemplo 10, as pilhas apareceriam da seguinte maneira em cada iteração:
Podemos ver que após a iteração final,
0, 1, 0, 1
foi criada na segunda pilha - os dígitos binários reversos de 100b1010
,.A segunda parte do código,,
L:vK2*;OS#
é retirada da minha resposta anterior, que converte binário em decimal . Usando o método descrito e explicado nessa resposta, ele converte os dígitos binários da pilha em um número inteiro de base 10 e imprime o resultado.fonte
k, 18 bytes
Exemplo:
fonte
C #, 167 bytes
Explicação:
Aqui, iterarei n valores e cada vez que o valor inteiro iterado for convertido em valor de byte, inverta esse valor de byte e esse valor de byte será convertido em valor inteiro.
fonte
STDIN
(acho queconsole.Read()
sim, mas você provavelmente saberia melhor do que eu) eSTDOUT
. De qualquer forma, bem-vindo ao site se você quer um conselho mais experiente no golfe C # Eu recomendaria codegolf.stackexchange.com/questions/173/....Reverse()
retornaIEnumerable<char>
. ComoConvert.ToInt32
não possui uma sobrecarga para IEnumerable, lança uma exceção. Além disso, a resposta não segue as regras do código golf: 1) Como nada é especificado, o envio deve ser um programa ou função completo, e não apenas um trecho. 2)using
declarações devem ser incluídos na contagem de bytesc / c ++ 136 bytes
Não vai ganhar, mas eu queria adotar uma abordagem diferente em c / c ++ 120 bytes na função
Para elaborar o que estou fazendo, usei a função log para determinar o número de bits utilizados pela entrada. Do que uma série de trocas de três bits para a esquerda / direita, dentro / fora, par / ímpar, que inverte todo o número inteiro. Finalmente, mude um pouco para mudar o número de volta para a direita. Usar decimais para deslocamento de bits em vez de hexadecimal é um problema, mas economizou alguns bytes.
fonte