Existe um famoso algoritmo complicado para contar o número de bits definidos em um número inteiro não assinado de 32 bits:
int popcount(unsigned x) {
x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
x = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);
return x;
}
Não vou explicar aqui. Mas imagine um código semelhante para números inteiros de 512 bits! As constantes hexadecimais seriam enormes e formariam um padrão bonito. Sua tarefa é simplesmente imprimir esta saída exata :
0x55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
0x33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff
0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff
0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff
0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff
0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Não há espaços finais, por favor - embora uma única nova linha final seja opcional.
Isso é código-golfe , então a resposta mais curta (em bytes) vence.
Respostas:
05AB1E ,
262221 bytes05AB1E usa a codificação CP-1252 .
Experimente online!
Explicação
Outras versões que podem ser aprimoradas
fonte
Python 2,
524946 bytesO número k é dado por
2**512/(2**2**k + 1)
. Isso é para um número de 512 bits, por isso é trivial estender o padrão para larguras diferentes.3 bytes salvos graças ao Dennis.
3 bytes salvos graças ao xnor.
fonte
l=2;exec"print'0x%0128x'%(2**512/-~l);l*=l;"*9
01010101
,00010001
,00000001
, e depois multiplicado os de1
,11
,1111
para obter os padrões binários corretos. Por exemplo,01010101
você pode obter a fórmula para uma certa largura w, fazendosum 2^(2*k) for k = 0, w/2 - 1
e descobrindo(2**w - 1)/3
.PHP,
111110108 bytesUm byte salvo graças a @ user59178.
Qual é o padrão para 1024 bits? : D
fonte
$x<65
vez de$i++<7
. Desta vez eu testei e tudo.Retina , 43 bytes
Experimente online!
Explicação
Isso faz muito uso da
:
opção geralmente subutilizada, que permite imprimir resultados intermediários, porque é muito mais curto modificar uma única linha do que construir toda a saída.Isso substitui a entrada vazia por
0x
seguida por 128 se5
imprime para gerar a primeira linha.Este substitui
5
s por3
s para gerar a segunda linha e a imprime também.Esta é a última linha de caixa especial e transforma-se a cada dois
3
s0f
para gerar a terceira linha. Isso também inicia um loop nos dois últimos estágios ({
). No entanto, esse estágio não fará nada após a primeira iteração, exceto imprimir o estado atual. Os;
suprime a saída no final do programa para evitar a duplicação de última linha.Esta substituição agora transforma cada linha para a seguinte, por troca de cada outro par de
f
s e0
s. A condição "todos os outros pares" é imposta combinando um zero na frente dof
, o que torna impossível combinar pares consecutivos, pois as correspondências não podem se sobrepor.fonte
Vim, 32 bytes
i5<CR>3<Esc>qqYpVrf$<C-V>{yPG1vr0q6@q<C-V>{I0x<Esc>
Eu só preciso escrever manualmente o primeiro
5
e3
, e a macro cuida do resto, "duplicando a contagem de bits" cada vez que é executado. A ordem das etapas na macro é um pouco estranha (faça uma novaf
linha, cópia em blocos, reutilize o tamanho do bloco visual para colocar0
s naf
linha), mas é a variante mais rápida que encontrei.fonte
Pitão, 26 bytes
Porta da minha resposta Python.
fonte
J,
4634 bytesEstou trabalhando nisso, mas esse bebê gosta de ficar em 46 bytes ...Não é mais! -12 bytes graças a milhas!Experimente online! : D
Resultado
Para esta resposta, eu precisava (idealmente) de um verbo com classificação
0 1
para usá-lo nau"v
definição de classificação; no entanto, as milhas observadas0 _
eram suficientes para a tarefa em questão.Aqui você vê várias representações de cadeias de verbos com suas respectivas classificações. Este é o script que eu usei para gerá-lo.
fonte
0 _
é bom aqui. Você pode encurtá-lo para 34 bytes com'0x',"1'5','3','0f'(128$#)"{~2^i.7
Na verdade , 25 bytes
Experimente online!
Esta solução usa o fato de que
f(n) = 2**512//(2**2**n + 1)
(onde//
é a divisão com piso) para compilar os valores.Explicação:
fonte
JavaScript (Firefox 30+),
139113112928380 bytesPor fim, atinja o ponto ideal recursivo :-) Usa uma compreensão prática de dândis para economizar 3 bytes
.map
:.replace
também tem 83 bytes:Se uma nova linha principal fosse permitida, isso também seria 80 bytes:
fonte
Python 2 , 60 bytes
Experimente online!
fonte
Chiclete , 65 bytes
Resposta obrigatória do chiclete.
fonte
Haskell,
8472 bytesPortando a resposta do @ orlp:
Alternativas de 94 bytes sem o poder de
Text.Printf
:fonte
Control.Monad
no REPL. Fixo.PowerShell v2 +, 68 bytes
O PowerShell não possui números inteiros de precisão arbitrários sem o uso de
[bigint]
chamadas, e esses não podem ser facilmente convertidos em hexadecimal; portanto, tratamos isso como um desafio baseado em string.A primeira linha lida com a repetição
5
e3
basta fazer uma multiplicação de128
caracteres para caracteres e colocar um0x
na frente.A próxima linha faz um loop de
$a=1
para7
, cada iteração produzindo outra string. Novamente, temos a0x
tachinha na frente, e estamos fazendo a multiplicação de cordas no meio para construir o número apropriado de0
ef
concatenadas juntas, e depois multiplicando as cordas disso para o número apropriado de caracteres. Observe que estamos usando a variável$a
aqui, e não o contador de loop$_
, para que possamos dimensionar adequadamente (caso contrário, precisaríamos fazer loop como1,2,4,8,16,32,64|%{...}
, que é mais longo).As seqüências resultantes são deixadas no pipeline e a saída via implícita
Write-Output
acontece na conclusão do programa, com uma nova linha entre elementos.fonte
V , 43 bytes
Experimente online!
Isso usa uma das regexes compactadas mais longas que eu já precisei em uma resposta em V. Aqui está a versão mais legível, onde adicionei um byte para expressões regulares legíveis e alterei o caractere de escape não imprimível para
<esc>
Explicação (usando a versão legível):
fonte
JavaScript (ES6),
747270 bytesInclui a nova linha à direita opcional.
Mostrar snippet de código
fonte
Pitão -
3130 bytesPara obter o padrão, exceto os
3
's e5
' s, o cumulativo é reduzido, duplicando cada vez os pedaços.Experimente online aqui .
fonte
Lote, 216 bytes
fonte
Vim 72 bytes
TryItOnline!
Não imprimíveis:
Os
@w
4s no final estão me incomodando, mas, como eu estava confiando em@q
falhar no final de uma linha, ele também falha no @w. Eu poderia tentar apenas executando q 32 vezes e ver se isso atrapalha as linhas posteriores.fonte
C, 146 bytes
Ungolfed:
fonte
brainfuck , 211 bytes
Experimente online!
fonte
x
gerador pode ser movido para fora do circuito agoraGNU sed 4.2.2 , 77
Experimente online.
fonte
Ruby ,
66 6045 bytesExperimente online!
Ideia roubada da orlp
fonte
C #, 168 bytes
fonte
Stax , 19 bytes
Execute e depure
Descompactado, não jogado e comentado, parece com isso.
Execute este
fonte
/// , 193 bytes
Experimente online!
fonte