... Desculpe, não há pipoca aqui, apenas POPCNT.
Escreva o programa ou função mais curto que recebe um número ne gera todos os números inteiros de 0 a 2 n - 1, em ordem crescente do número de 1 bits na representação binária dos números (popcount). Não são permitidas duplicatas.
A ordem dos números com o mesmo número de pop-up é definida pela implementação.
Por exemplo, para n = 3, todas essas saídas são válidas:
0, 1, 2, 4, 3, 5, 6, 7
[0, 4, 1, 2, 5, 3, 6, 7]
0 4 2 1 6 5 3 7
O formato de entrada e saída é definido pela implementação para permitir o uso de recursos de idioma para aprimorar ainda mais o código. Existem algumas restrições na saída:
- Os números devem ser impressos no formato decimal.
A saída deve conter um separador razoável entre os números (o separador à direita é permitido, mas não à esquerda).
Alimentação de linha (
\n), guia (\t), espaço,,,.,;,|,-,_,/são separador bastante razoável. Não me preocupo com espaços adicionais para uma impressão bonita, mas não use letras ou dígitos como separadores.- Os números e separadores podem ser colocados entre
[ ],{ }ou qualquer notação de matriz ou lista. - Não imprima nada além do indicado acima.
Bônus
Multiplique sua pontuação por 0,5 se sua solução puder gerar o número em tempo real. O espírito desse bônus é que, se você converter diretamente sua solução de impressão em um gerador, o gerador usará apenas no máximo O (n) de memória, onde n é o número de bits, conforme definido acima. (Na verdade, você não precisa converter sua solução em gerador). Observe que, embora eu imponha n <= 28, a memória necessária para armazenar todos os números ainda cresce exponencialmente, e uma solução de classificação ingênua consumiria pelo menos 4 GB de memória em n = 28.
Adicione uma explicação simples de como sua solução funciona antes de reivindicar esse bônus.