Um número inteiro positivo N é K- separado se houver pelo menos K 0s entre quaisquer dois 1s consecutivos em sua representação binária.
Portanto, o número 1010101 é 1-esparso, enquanto 101101 não é.
Sua tarefa é encontrar o próximo número 1 esparso para o número de entrada especificado. Por exemplo, se a entrada for 12 ( 0b1100
), a saída deve ser 16 ( 0b10000
) e se a entrada é 18 ( 0b10010
), a saída deve ser 20 ( 0b10100
).
O menor programa ou função (em bytes) vence! Lacunas padrão não permitidas.
code-golf
number
arithmetic
base-conversion
binary
articuno
fonte
fonte
Respostas:
Pitão, 9 bytes
x & (x*2) != 0
algoritmo de @alephalphaMinha primeira tentativa em Pyth:
Experimente aqui
fonte
CJam,
1411 bytes3 bytes salvos graças ao DigitalTrauma.
Teste aqui.
Explicação
Isso deixa o último número na pilha que é impresso automaticamente no final do programa.
fonte
Python 2, 44 bytes
Este é um programa python completo que lê n e imprime a resposta. Eu acho que se sai muito bem na subcompetição de legibilidade.
Os resultados do teste:
fonte
Pitão,
1211 bytesExperimente online: Pyth Compiler / Executor .
fonte
"11"
em`11
.Mathematica,
4130 bytesEconomizou 11 bytes graças a Martin Büttner.
fonte
Perl, 31
Ou na linha de comando:
fonte
APL, 18 bytes
Isso avalia uma função monádica. Experimente aqui. Uso:
Explicação
fonte
J, 20 caracteres
Um verbo monádico. Corrigido para obedecer às regras.
Explicação
Primeiro, este é o verbo com espaços e depois um pouco menos jogado:
Ler:
Basicamente, calculo se
1 1
ocorre na representação base-2 da entrada. Se isso acontecer, eu incremento a entrada. Isso é colocado sob um limite de potência, o que significa que é aplicado até que o resultado não mude mais.fonte
{⍵+∨/2∧/⍵⊤⍨⍵⍴2}⍣=
.Javascript,
2519Usando o fato de que, para um número binário 1-esparsa,
x&2*x == 0
:fonte
JavaScript (ES6), 39
43Sem regexp, sem strings, recursivo:
Versão iterativa:
É muito simples, basta usar o shift direito para encontrar uma sequência de 11. Quando o encontrar, pule para o próximo número. A versão recursiva é diretamente derivada da iterativa.
Ungolfed e mais óbvio. Para o golfe, a parte mais complicada é mesclar os loops internos e externos (tendo que iniciar x a 3 no início)
fonte
%4>2
parece uma feitiçaria da teoria dos números, você pode explicar || fornecer um link?Python 2, 37 bytes
Utilizou a lógica
x & 2*x == 0
do número 1 esparso.Graças a @Nick e @CarpetPython.
fonte
JavaScript,
756662 bytesAgradecemos a Martin Büttner por salvar 9 bytes e a Pietu1998 por 4 bytes!
Como funciona: executa um
for
loopa + 1
desde que o número atual não seja 1 esparso e, se for, o loop é interrompido e retorna o número atual. Para verificar se um número é 1 esparso, ele o converte em binário e verifica se ele não contém11
.Código não golfe:
fonte
Julia, 40 bytes
Isso cria uma função anônima que aceita um único número inteiro como entrada e retorna o próximo número inteiro 1 esparso mais alto. Para chamá-lo, dê um nome, por exemplo
f=n->...
, e façaf(12)
.Ungolfed + explicação:
Exemplos:
Sugestões e / ou perguntas são bem-vindas, como sempre!
fonte
> <> (Peixe) , 31 + 3 = 34 bytes
Uso:
3 bytes adicionados para o
-v
sinalizador.fonte
JavaScript (ECMAScript 6), 40
Por recursão:
JavaScript, 56
Mesmo sem funções de seta.
fonte
Scala, 65 bytes
(se uma função nomeada for necessária, a solução será 69 bytes)
fonte
Python,
3933 bytesExperimente aqui: http://repl.it/gpu/2
Na forma lambda (graças ao xnor para jogar golfe):
A sintaxe da função padrão
acabou sendo mais curta que uma lambda pela primeira vez!fonte
f=lambda x:1+x&x/2and f(x+1)or-~x
. Acontece que você desloca o bit para a direita e não para a esquerda, você pode usá-lo emx/2
vez de(x+1)/2
porque a diferença está sempre em zero bits dex+1
. A especificação pede um programa embora.Java, 33 bytes.
Usa o método nesta resposta
TIO
fonte
Ruby, 44
Bastante básico. Um lambda com um loop infinito e uma regexp para testar a representação binária. Eu gostaria que esse
loop
número rendesse e índice.fonte
Matlab (
7774 bytes)Notas:
m+1
para2*m
, ondem
está a entrada.~any(x)
étrue
sex
contém todos os zeros ou sex
está vaziofonte
C (32 bytes)
Implementação recursiva do mesmo algoritmo que muitas outras respostas.
fonte
Perl, 16 bytes
Combinando as
x&2*x
respostas de várias (acho que o primeiro de Nick ) com osredo
rendimentos de nutki :Testado em morango 5.26.
fonte
Japonês, 8 bytes
Execute-o online.
fonte
Geléia , 7 bytes
Um programa completo que aceita um número inteiro único e não negativo que imprime um número inteiro positivo (como um link monádico, gera uma lista contendo um único número inteiro positivo).
Experimente online!
Quão?
Começando em
v=n+1
e incrementando, dupliquev
para mudar cada bit para cima um lugar e bit a bit AND comv
e, em seguida, execute NOT lógico para testar sev
é 1 esparso até que um desses números seja encontrado.fonte
Stax , 5 bytes
Execute e depure
Funciona usando este procedimento. A entrada começa no topo da pilha.
fonte