Hay un famoso algoritmo complicado para contar el número de bits establecidos en un entero sin signo 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;
}
No lo explicaré aquí. ¡Pero imagine un código similar para enteros de 512 bits! Las constantes hexadecimales serían enormes y formarían un bonito patrón. Su tarea es simplemente imprimir esta salida exacta :
0x55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
0x33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff
0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff
0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff
0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff
0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Sin espacios finales, por favor, aunque una nueva línea final es opcional.
Este es el código de golf , por lo que gana la respuesta más corta (en bytes).
Respuestas:
05AB1E ,
262221 bytes05AB1E usa la codificación CP-1252 .
Pruébalo en línea!
Explicación
Otras versiones que podrían mejorarse
fuente
Python 2,
524946 bytesEl késimo número viene dado por
2**512/(2**2**k + 1)
. Esto es para un número de 512 bits, por lo que es trivial extender el patrón a diferentes anchos.3 bytes guardados gracias a Dennis.
3 bytes guardados gracias a xnor.
fuente
l=2;exec"print'0x%0128x'%(2**512/-~l);l*=l;"*9
01010101
,00010001
,00000001
, y luego se multiplica por aquellos1
,11
,1111
para obtener los patrones binarios correctos. Por ejemplo01010101
, puede obtener la fórmula para un cierto ancho w haciendosum 2^(2*k) for k = 0, w/2 - 1
y descubriendo que es(2**w - 1)/3
.PHP,
111110108 bytesUn byte guardado gracias a @ user59178.
¿Cuál es el patrón para 1024 bits? :RE
fuente
$x<65
lugar de$i++<7
. Esta vez lo probé y todo.Retina , 43 bytes
Pruébalo en línea!
Explicación
Esto hace mucho uso de la
:
opción generalmente infrautilizada que le permite imprimir resultados intermedios, porque es mucho más corto modificar una sola línea que generar toda la salida.Esto reemplaza la entrada vacía con
0x
seguida de 1285
sy la imprime para generar la primera línea.Éste reemplaza la
5
s con3
s para generar la segunda línea y también la imprime.Esta es la última línea con mayúsculas especiales y se convierte cada dos
3
s0f
para generar la tercera línea. Esto también inicia un ciclo a través de las últimas dos etapas ({
). Sin embargo, esta etapa no hará nada después de la primera iteración, excepto imprimir el estado actual. Los;
suprime la salida al final del programa para evitar la duplicación de la última línea.Esta sustitución ahora transforma cada línea en la siguiente, intercambiando cualquier otro par de
f
sy0
s. La condición de "cualquier otro par" se aplica haciendo coincidir un cero delante delf
, lo que hace que sea imposible hacer coincidir pares consecutivos ya que las coincidencias no pueden superponerse.fuente
Vim, 32 bytes
i5<CR>3<Esc>qqYpVrf$<C-V>{yPG1vr0q6@q<C-V>{I0x<Esc>
Solo necesito escribir manualmente el primero
5
y3
, y la macro se encarga del resto, "duplicando el conteo de bits" cada vez que se ejecuta. El orden de los pasos en la macro es un poco extraño (hacer una nuevaf
línea, copiar en bloque, reutilizar el tamaño del bloque visual para poner0
s en laf
línea), pero es la variante más rápida que he encontrado.fuente
Pyth, 26 bytes
Puerto de mi respuesta de Python.
fuente
J,
4634 bytesEstoy trabajando en esto, pero a este bebé le gusta quedarse en 46 bytes ...¡Ya no! -12 bytes gracias a millas!Pruébalo en línea! :RE
Resultado
Para esta respuesta, necesitaba (idealmente) un verbo con rango
0 1
para usarlo en lau"v
definición de rango; sin embargo, millas observaron que0 _
era suficiente para la tarea en cuestión.Aquí puede ver un montón de representaciones de cadenas de verbos con sus respectivos rangos. Este es el script que usé para generarlo.
fuente
0 _
está bien aquí. Puede acortarlo a 34 bytes con'0x',"1'5','3','0f'(128$#)"{~2^i.7
En realidad , 25 bytes
Pruébalo en línea!
Esta solución utiliza el hecho de que
f(n) = 2**512//(2**2**n + 1)
(donde//
se divide la división) para compilar los valores.Explicación:
fuente
JavaScript (Firefox 30+),
139113112928380 bytesFinalmente golpee el punto dulce recursivo :-) Utiliza una comprensión de cadena práctica y elegante para guardar 3 bytes en
.map
:.replace
también tiene 83 bytes:Si se permitiera una nueva línea principal, esto también sería de 80 bytes:
fuente
Python 2 , 60 bytes
Pruébalo en línea!
fuente
Chicle , 65 bytes
Respuesta obligatoria de Bubblegum.
fuente
Haskell,
8472 bytesPortar la respuesta de @ orlp:
Alternativas de 94 bytes sin el poder de
Text.Printf
:fuente
Control.Monad
en el REPL. Fijo.PowerShell v2 +, 68 bytes
PowerShell no tiene enteros de precisión arbitrarios sin usar
[bigint]
llamadas, y esos no se pueden convertir fácilmente a hexadecimales, por lo que en su lugar estamos tratando esto como un desafío basado en cadenas.La primera línea maneja la repetición
5
y3
simplemente haciendo una multiplicación de cadena a los128
caracteres y clavando una0x
en el frente.La siguiente línea recorre de
$a=1
a7
, cada iteración genera otra cadena. Una vez más, tenemos la0x
tachuela al frente, y estamos haciendo una multiplicación de cuerdas en el medio para construir el número apropiado0
yf
concatenado juntos, y luego haciendo la multiplicación de cadenas de eso al número apropiado de caracteres. Tenga en cuenta que estamos usando variables$a
aquí, y no el contador de bucles$_
, por lo que podemos escalar correctamente (de lo contrario, tendríamos que hacer un bucle como1,2,4,8,16,32,64|%{...}
, que es más largo).Las cadenas resultantes se dejan en la tubería, y la salida por vía implícita
Write-Output
ocurre al finalizar el programa, con una nueva línea entre los elementos.fuente
V , 43 bytes
Pruébalo en línea!
Utiliza una de las expresiones regulares comprimidas más largas que he necesitado en una respuesta V. Aquí está la versión más legible, donde agregué un byte para expresiones regulares legibles y cambié el carácter de escape no imprimible a
<esc>
Explicación (usando la versión legible):
fuente
JavaScript (ES6),
747270 bytesIncluye la nueva línea final opcional.
Mostrar fragmento de código
fuente
Pyth -
3130 bytesPara obtener el patrón, excepto los
3
's y5
' s, se reduce acumulativamente, duplicando cada vez los trozos.Pruébelo en línea aquí .
fuente
Lote, 216 bytes
fuente
Vim 72 bytes
TryItOnline!
No imprimibles
Los 4
@w
s al final me están molestando, pero debido a que confiaba en@q
fallar al final de una línea, también falla el @w. Podría intentar ejecutar q 32 veces y ver si estropea las líneas posteriores.fuente
C, 146 bytes
Sin golf:
fuente
brainfuck , 211 bytes
Pruébalo en línea!
fuente
x
generador se puede mover fuera del circuito ahoraGNU sed 4.2.2 , 77
Pruébalo en línea.
fuente
Ruby ,
66 6045 bytesPruébalo en línea!
Idea robada de orlp
fuente
C #, 168 bytes
fuente
Stax , 19 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
/// , 193 bytes
Pruébalo en línea!
fuente