Um bit flutua do LSB para o MSB, movendo-se uma posição de cada vez até flutuar para o topo do contêiner:
0000
0001
0010
0100
1000
Quando um bit flutua para o topo, outro bit inicia sua jornada e para quando encontra outro bit:
1001
1010
1100
Isso acontece até que o contêiner seja preenchido com bits:
1101
1110
1111
Desafio
Dado um número inteiro, imprima a " Sequência flutuante de bits " para um contêiner desse número de bits.
- Cada termo da sequência pode ser separado por qualquer separador de sua escolha.
- Editar : Sequência deve ser mostrados como números decimais inteiros, começando pelo primeiro terma:
0
. - O tamanho do contêiner deve ser maior que zero e até o número de bits do maior número inteiro suportado pelo idioma de sua escolha. Você pode assumir que a entrada sempre corresponde a esse requisito.
Exemplos
Somente a sequência numérica é necessária, a representação binária é mostrada como exemplo:
Para 1 :
0 1
0 -> 0 1 -> 1
Para 3 :
0 1 2 4 5 6 7
000 -> 0 001 -> 1 010 -> 2 100 -> 4 101 -> 5 110 -> 6 111 -> 7
Para 4 :
0 1 2 4 8 9 10 12 13 14 15
0000 -> 0 0001 -> 1 0010 -> 2 0100 -> 4 1000 -> 8 1001 -> 9 1010 -> 10 1100 -> 12 1101 -> 13 1110 -> 14 1111 -> 15
Para 8 :
0 1 2 4 8 16 32 64 128 129 130 132 136 144 160 192 193 194 196 200 208 224 225 226 228 232 240 241 242 244 248 249 250 252 253 254 255
00000000 -> 0 00000001 -> 1 00000010 -> 2 00000100 -> 4 00001000 -> 8 … … … 11111000 -> 248 11111001 -> 249 11111010 -> 250 11111100 -> 252 11111101 -> 253 11111110 -> 254 11111111 -> 255
[0.0, 1.0]
0 -> [0, 1]
Respostas:
05AB1E , 10 bytes
Experimente online!
fonte
.0
por padrão para números inteiros, mas não tenho certeza. Pessoalmente, geralmente coloco oï
rodapé para imprimir e não o incluo na contagem de bytes.Python 2 , 45 bytes
Experimente online!
É mais curto gerar
2**n
menos cada termo na sequência de entradan
. Se olharmos para a expansão binária, abaixo, paran=5
, vemos um bom padrão de triângulos de 1 nas expansões binárias.Cada número é obtido do anterior removendo o mais à direita na expansão binária, exceto se isso for o número 0, subtraímos 1 em vez disso, criando um novo bloco de 1s que inicia um novo triângulo menor. Isso é implementado como
y=y&y-1or~-y
, ondey&y-1
é um pequeno truque para remover o 1 mais à direita, eor~-y
fornecey-1
se esse valor foi 0.Python 2 , 49 bytes
Experimente online!
Uma função que imprime, terminando com erro. O programa mais agradável abaixo acabou por mais tempo.
51 bytes
Experimente online!
fonte
Geléia ,
1110 bytesPorto de @Grimy resposta 05AB1E 's , por isso, certifique-se de upvote-lo!
-1 byte graças a @Grimy .
Experimente online.
Explicação:
fonte
R_2
->Ḷ’
para -1.Ḷ
é o único alcance sensato , eu realmente gostaria que o 05AB1E tivesse um único byter para isso.Perl 5 (
-n
),4140 bytes-1 byte thanls em Xcali
TIO
"{0,1}"x$_
: a sequência"{0,1}"
repetida n vezes"0b".
: concatenar para"0b"
glob
: expansão glob (produto cartesiano)map{
...}
: para cada elemento/01.*1/||
: pular quando for01
seguido por algo1
say oct
: para converter para decimal e dizerfonte
JavaScript (ES6), 43 bytes
Em caso de dúvida, use o método xnor .
Experimente online!
JavaScript (ES6),
59 57 5552 bytesExperimente online!
Quão?
Comentado
fonte
Python 2 ,
9576 bytesExperimente online!
fonte
Perl 6 , 43 bytes
Experimente online!
Bloco de código anônimo que pega um número e gera a sequência separada por novas linhas. Isso funciona, começando com 0 repetidas n vezes, em seguida, substituindo, quer
01
com10
ou o último0
com um1
até que o número é apenas queridos.Ou 40 bytes, usando a abordagem de Nahuel Fouilleul
Experimente online!
fonte
01
com10
ou o último0
com um1
até que o número é apenas os " Isso é um movimento gênio!Python 2 , 60 bytes
Experimente online!
Python 3 , 76 bytes
Experimente online!
fonte
Python 2 , 67 bytes
Experimente online!
fonte
Python 3 , 62 bytes
Experimente online!
A idéia é mais ou menos a mesma que a solução da @ Arnauld .
Outra solução de 65 bytes:
Experimente online!
fonte
Gelatina , 12 bytes
Experimente online!
fonte
05AB1E ,
1312 bytes-1 byte graças a @Grimy ( veja também sua abordagem mais curta aqui).
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
oL<ʒbIj1Û1¢2‹
. Não parece que eu posso diminuí-lo.oL<ʒbIj1ÛSO2‹
e estava tentando ver onde estava o meu erro. :) Mas fico feliz em ver que você não consegue encontrar uma versão mais curta para uma das minhas respostas, para variar. ; p (inb4 você encontra um menor, afinal xD)SO2‹
pode ter 3 bytes, de alguma forma, talvez, mas não estou vendo e também não tenho certeza. Existem algumas alternativas, comoSO1~
ouSÆ>d
, mas não consigo encontrar um byter de 3.SO!
. Tenho certeza de que tenho algumas respostas antigas2‹
que poderiam se beneficiar disso também.Retina , 26 bytes
Experimente online! Saídas em binário. Se isso não for aceitável, então para 39 bytes:
Experimente online! Explicação:
Converta a entrada em uma sequência de
n
zeros.Combine todas as possíveis substrings não vazias.
Para cada substring, output: o prefixo com
0
s mudou para1
s; o sufixo; a partida com a inicial0
alterada para1
.Converta de binário para decimal.
fonte
Braquilog , 27 bytes
Experimente online!
Saídas fora de ordem e com duplicatas. Se não estiver tudo bem, siga
do
para o final.fonte
Carvão , 19 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Perl 5 , 40 bytes
Experimente online!
fonte
Retina , 24 bytes
Saídas em binário. A entrada deve ter uma nova linha à direita.
Tentativa de explicação:
Tentei evitar a
/0/
opção regex de 3 bytes de comprimento reorganizando as opções, mas não consegui.Experimente online!
fonte
C (clang) , 73 bytes
Experimente online!
fonte
k4,
2824 bytes@ Abordagem de Grimy portada para k4
edit: -4 graças a ngn!
fonte
!:'1+|!:
->|,\!:
xexp
|,\!:
parece tão óbvio agora que eu vejo isso!