Entrada
A entrada é um número inteiro positivo único n
Saída
A saída está n
com o bit mais significativo definido como 0
.
Casos de teste
1 -> 0
2 -> 0
10 -> 2
16 -> 0
100 -> 36
267 -> 11
350 -> 94
500 -> 244
Por exemplo: 350
em binário é 101011110
. Definir o bit mais significativo (ou seja, o 1
bit mais à esquerda ) para 0
transformá-lo no 001011110
equivalente ao número inteiro decimal 94
, a saída. Este é o OEIS A053645 .
10
obviamente dá0
: DRespostas:
C (gcc) ,
49444039 bytesExperimente online!
fonte
i<=n
comn/i
para -1 byte. Este não é o meu jogo de golfe, alguém tentou editá-lo em sua postagem, mas eu o revirei porque as edições de jogos de golfe não são aceitas de acordo com as regras da comunidade.Python 2 , 27 bytes
Experimente online!
26 bytes
Infelizmente, isso não funciona para
1
:Experimente online!
fonte
05AB1E , 5 bytes
Experimente online!
Removendo o bit mais significativo de um número inteiro N é equivalente a encontrar a distância a partir de N para a maior potência inteira de 2 inferior ao N .
Assim, usei a fórmula N - 2 andar (log 2 N) :
.²
- Logaritmo com base 2 .ó
- Pavimento para um número inteiro.o
- 2 elevado à potência do resultado acima.-
- Diferença.fonte
b¦C
também funciona ... não é? Converta em binário, o MSB está sempre no índice 1, remova o MSB, converta novamente.1
!Gelatina , 3 bytes
Experimente online!
Explicação
fonte
Ḅ
eḊ
pontos de código de dois bytes? Isso mudaria o tamanho geral para 5 bytes.C (gcc) - 59 bytes
Esta resposta do gcc usa apenas operações inteiras bit a bit e aritméticas. Não há logaritmos aqui! Pode ter problemas com uma entrada 0 e é totalmente não portátil.
É a minha primeira resposta neste site, então eu adoraria comentários e melhorias. Eu certamente me diverti aprendendo expressões bit a bit.
fonte
main
, uma função é um envio válido . Mudar isso para uma função e receber entrada como argumento para a referida função economiza 18 bytes .MATL ,
86 bytesExperimente online!
Economizou dois bytes graças a Cinaski. A mudança para a indexação de atribuição em vez da indexação de referência foi 2 bytes mais curta :)
Explicação:
fonte
4L
em vez de[2J]
. Um outro divertimento 6 bytes:tZlcW-
(só funciona em MATLAB, não em TIO / Octave)Java (OpenJDK 8) , 23 bytes
Experimente online!
Desculpe, embutido: - /
fonte
n->n^1<<(int)Math.log2(n)
vai funcionar e provavelmente é menor que 38 bytes. Foi a minha segunda ideia (ainda não testada), se ahighestOneBit
que não funcionou adequadamente. Por curiosidade, qual foi a sua soluçãon->n^1<<(int)(Math.log(n)/Math.log(2))
porqueMath.log2
não existe em Java. ; Apenas PMath.log
,Math.log10
eMath.loglp
estão disponíveis.Math.log2
não existe mesmo ... Meu mal. Vejo? Um bom método (highestOneBit
) existe, mas não outro (Math.log2
). Java é ;-) estranhoCasca , 3 bytes
Experimente online!
Explicação:
fonte
Ohm v2 , 3 bytes
Experimente online!
fonte
Python 2 , 27 bytes
Experimente online!
Explicação
fonte
2**len(bin(n))/8
também pode ser escrito1<<len(bin(n))-3
e, em seguida, funcionará em 2 e 3 (sem bytes salvos / adicionados).Python 3 , 30 bytes
-8 bytes graças a caird coinheringaahing. Eu digitei isso de memória. : o
Experimente online!
fonte
lambda n:int(bin(n)[3:],2)
?Mathematica, 37 bytes
Experimente online!
fonte
JavaScript,
2220 bytesEconomizou 2 bytes graças a ovs
Experimente online!
Outra abordagem, 32 bytes
Experimente online!
fonte
.slice`1`^0
quando.slice(1)^0
iria funcionar tão bem, hahaJ, 6 bytes
Bem simples.
Explicação
fonte
APL (Dyalog) , 10 bytes
Função de prefixo tácito.
Experimente online!
2∘⊥
... descodificar a partir da base-2 ......
⍣¯1
tempo um negativo (ou seja, codificam na base 2)1↓
largar o primeiro bit2⊥
decodificar da base-2fonte
Ruby, 26 bytes
-7 bytes graças a Ventero. -2 bytes graças ao historicrat.
fonte
->n{n.to_s(2)[1..-1].to_i 2}
->n{/./=~'%b'%n;$'.to_i 2}
C (gcc), 38 bytes
Built-in gcc usado.
fonte
31-
por~
deve salvar dois bytes.Montagem do BRAÇO,
4643 bytes(Você pode omitir o registro de destino ao adicionar quando for igual à fonte)
fonte
shr
/shl
/ret
e quer algo comolsr
/lsl
/bx lr
.Pitão, 5 bytes
Suíte de teste.
Explicação:
fonte
Alice , 8 bytes
Experimente online!
Explicação
fonte
Japonês , 6 bytes
Experimente online!
Explicação
Se a entrada
1
puder falhar: 4 bytesExperimente online!
Explicação : obtenha binário de entrada (
¢
), corte primeiro char (Å
), analise como binário novamente em um número (n2
).fonte
Oitava , 20 bytes
Experimente online!
fonte
APL (Dyalog Unicode) , 9 bytes
Experimente online!
-1 byte graças a Adam
fonte
⊢-2*∘⌊2⍟⊢
salva um byte.CJam , 7 bytes
Experimente online!
Explicação:
Reutilize o MSB (que é sempre 1) para evitar ter que excluí-lo; o equivalente sem esse truque seria
{2b1>2b}
ou{2b(;2b}
.fonte
Retina ,
1513 bytesExperimente online!
Entrada e saída em unário (o conjunto de testes inclui a conversão de e para decimal por conveniência).
Explicação
Isso é bastante fácil de fazer em unário. Tudo o que queremos fazer é excluir a maior potência de 2 da entrada. Podemos combinar uma potência de 2 com algumas referências avançadas. Na verdade, é mais fácil corresponder aos valores do formulário 2 n -1 , portanto, faremos isso e corresponderemos a 1 separadamente:
O grupo
1
corresponde a um single1
no início para iniciar as coisas ou corresponde ao dobro do que fez na última iteração. Então corresponde1
, então2
, então4
e assim por diante. Uma vez que estes são somados, estamos sempre com uma potência abaixo de 2, que corrigimos1
no final.Devido ao avanço de linha à direita, a correspondência é simplesmente removida da entrada.
fonte
R , 28 bytes
Experimente online!
Mais fácil calcular o bit mais significativo por
2 ^ floor(log2(x))
meio de conversões básicas, que são bastante detalhadas em Rfonte
PARI / GP, 18 bytes
Solução alternativa:
fonte
n->n-2^logint(n,2)
? O segundo não é suportado na minha versão do PARI / GP, nem na versão usada pelo tio.run . Essa é uma nova função?exponent
foi adicionado 5 dias atrás, comparado a este desafio que foi adicionado ontem. :)Haskell ,
3229 bytesExperimente online!
-3 bytes graças a @Laikoni
Solução mais antiga, 32 bytes
Experimente online!
fonte
f=
da primeira variante. Além disso,z<-2*y=x!z
economiza um byte: Experimente online!Excel, 20 bytes
fonte
Excel,
3631 bytes-5
bytes graças a @ IanM_Matrix1Nada interessante.
fonte