Você receberá um número x
, onde 0 <= x <= 2^32 - 1
.
Você deve gerar uma lista de números em decimal, após a divisão recursiva em formato binário.
Exemplos:
Exemplo 1:
255 -> 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
A lista atual é justa 255
.
A representação binária de 255
é 1111 1111
. Dividindo, obtemos 1111
e 1111
, que em decimal são 15
e 15
.
Nós os adicionamos à lista, então teremos 255 15 15
.
Agora os números 15
e 15
servirão como entradas e esses números serão divididos.
Fazê-lo novamente, obtemos ( 3 3
de ambos 15
s): 255 15 15 3 3 3 3
.
Continuando a lógica, a lista final será 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
. E como 1
não pode mais ser dividido, a saída é interrompida.
Exemplo 2:
225 -> 225 14 1 3 2 1 1 1 0
A lista inicial é 225
.
A representação binária de 225
é 1110 0001
. Dividindo, obtemos 1110
e 0001
, que em decimal são 14
e 1
.
Adicionando-os à lista, obtemos 225 14 1
.
Agora os números 14
e 1
servirão como entradas e esses números serão divididos.
Como 1
não é divisível, a saída será 225 14 1 3 2
.
Exemplo 3:
32 -> 32 4 0 1 0
Condições :
- Se o número de dígitos binários for ímpar, o primeiro número terá um dígito binário a menos que o próximo. Exemplo,
20 (10100)
será dividido como10
e100
, com a saída decimal sendo2
e4
. - Aplicam-se regras de brecha padrão.
0
se1
não se propagam mais.- Falha no programa por tentar exibir muitos números é uma condição de saída válida.
fonte
0
s quando o comprimento é ímpar?0
s.Respostas:
Pitão, 18 bytes
Suíte de teste
Esse código faz algo muito complicado e inteligente com
u
o operador de ponto fixo do Pyth.O corpo da função, que é tudo diferente de
u
, é bastante direto:Esse código remove 0s e 1s, divide todos os números e adiciona a entrada na frente.
u
executará esta função no resultado anterior da função até que o resultado pare de mudar.Qual valor inicial
u
usa? Essa é a parte mais inteligente: o código não especifica qual valor usar, então o padrão é a entrada. Mas a entrada não é uma lista de números - é um número. Pyth implica implicitamente o número no primeiro tempo através do loop até o intervalo do número -[0, 1, ..., Q-1]
. Isso não se parece em nada com o resultado que queremos obter. Felizmente,u
encontrará o resultado correto, independentemente da entrada inicial - a saída desejada é o único ponto fixo da função e a aplicação repetida sempre o alcançará.Vejamos os valores intermediários do programa com a entrada
7
. Eu destaquei o prefixo do resultado que é garantido como correto, independentemente da entrada inicial:7
(Implicitamente[0, 1, 2, 3, 4, 5, 6]
)[7,
1, 0, 1, 1, 1, 0, 1, 1, 1, 2]
[7, 1, 3,
1, 0]
[7, 1, 3, 1, 1]
Qual é a saída.
Pyth compactado, 16 bytes
Observe que, como o Pyth usa apenas o intervalo 0-127 do ASCII, ele pode ser compactado usando uma codificação de 7 bits em vez de uma codificação de 8 bits. Assim, o programa acima pode ser compactado em 16 bytes. O programa resultante é:
hexdump:
O intérprete é encontrado aqui . Forneça a entrada como um argumento da linha de comandos.
A página de código desse idioma (Packed Pyth) é o intervalo de 0 a 127 do ASCII, e cada caractere é representado com 7 bits, preenchido no final. Assim, o hexdump ilegível acima representa:
Mas em 16 bytes.
fonte
05AB1E ,
21201817 bytesExperimente online!
Explicação
fonte
ʒ
- Esta nova página de códigos ... Desde quando é 05AB1E Jelly? Eu gosto.JavaScript (ES6), 99 bytes
Parece um pouco longo. Pode haver uma maneira melhor de obter a ordem correta.
Demo
Mostrar snippet de código
fonte
Geléia ,
2120 bytes-1 byte, removendo uma cadeia monádica e, em seguida, lidando com a conseqüência de uma lista vazia ser convertida do binário com 0 mais tarde.
Um link monádico pegando um número e retornando a lista especificada.
Experimente online!
Quão?
fonte
Java 7, 541 bytes
Manter o pedido original me ferrou muito, caso contrário, seria apenas um princípio fácil de loop e chamada recursiva. Ainda assim, é um desafio divertido de descobrir, mantendo a ordem.
Explicação:
Código do teste:
Experimente aqui.
Resultado:
fonte
Python 2 , 110 bytes
Experimente online!
fonte
Retina , 142 bytes
Experimente online!
fonte
PHP, 132 bytes
Experimente online!
fonte
Array( [0] => 225 [1] => 14 [2] => 1 [3] => 3 [4] => 2 [5] => 1 [6] => 1 [7] => 1 [8] => 0 )
quando não = 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1$argn
Esta variável estará disponível se você estiver executando o PHP na linha de comando com a-R
opção Aqui está um exemplo para a entrada 255 Experimente online!Ruby , 102 bytes
Experimente online!
fonte
Ruby , 98 bytes
Experimente online!
Simplesmente uma otimização básica da resposta do Value Ink : use flat_map em vez de map ... flatten e use
a==[]?a
ao invés dea==[]?[]
fonte