Il existe un célèbre algorithme délicat pour compter le nombre de bits définis dans un entier non signé 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;
}
Je ne l'expliquerai pas ici. Mais imaginez un code similaire pour les entiers 512 bits! Les constantes hexadécimales seraient énormes et formeraient un joli motif. Votre tâche consiste simplement à imprimer cette sortie exacte :
0x55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
0x33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff
0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff
0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff
0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff
0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Pas d'espaces de fin, s'il vous plaît - bien qu'une seule nouvelle ligne de fin soit facultative.
Il s'agit de code-golf , donc la réponse la plus courte (en octets) l'emporte.
Réponses:
05AB1E ,
262221 octets05AB1E utilise l' encodage CP-1252 .
Essayez-le en ligne!
Explication
Autres versions qui pourraient être améliorées
la source
Python 2,
524946 octetsLe kième nombre est donné par
2**512/(2**2**k + 1)
. C'est pour un nombre de 512 bits, il est donc trivial d'étendre le motif à différentes largeurs.3 octets enregistrés grâce à Dennis.
3 octets enregistrés grâce à xnor.
la source
l=2;exec"print'0x%0128x'%(2**512/-~l);l*=l;"*9
01010101
,00010001
,00000001
, puis multiplié par ceux1
,11
,1111
pour obtenir les schémas binaires corrects. Par exemple,01010101
vous pouvez obtenir la formule pour une certaine largeur w en faisantsum 2^(2*k) for k = 0, w/2 - 1
et en découvrant qu'elle est(2**w - 1)/3
.PHP,
111110108 octetsUn octet enregistré grâce à @ user59178.
Quel est le modèle pour 1024 bits? :RÉ
la source
$x<65
plutôt que$i++<7
. Cette fois, je l'ai testé et tout.Rétine , 43 octets
Essayez-le en ligne!
Explication
Cela fait beaucoup usage de l'
:
option généralement sous-utilisée qui vous permet d'imprimer des résultats intermédiaires, car il est beaucoup plus court de modifier une seule ligne que de créer la sortie entière.Ceci remplace l'entrée vide par
0x
suivie de 1285
s et l'imprime pour générer la première ligne.Celui-ci remplace le
5
s par3
s pour générer la deuxième ligne et l'imprime également.Il s'agit de la dernière ligne à boîtier spécial et elle se transforme tous les deux
3
s en0f
pour générer la troisième ligne. Cela démarre également une boucle à travers les deux dernières étapes ({
). Cependant, cette étape ne fera rien après la première itération, sauf imprimer l'état actuel. Le;
supprime la sortie à la toute fin du programme pour éviter de dupliquer la dernière ligne.Cette substitution transforme maintenant chaque ligne en la suivante, en échangeant toutes les autres paires de
f
s et de0
s. La condition "toutes les autres paires" est appliquée en faisant correspondre un zéro devant lef
, ce qui rend impossible la correspondance des paires consécutives car les correspondances ne peuvent pas se chevaucher.la source
Vim, 32 octets
i5<CR>3<Esc>qqYpVrf$<C-V>{yPG1vr0q6@q<C-V>{I0x<Esc>
Je n'ai qu'à écrire manuellement le premier
5
et3
, et la macro s'occupe du reste, "doubler le nombre de bits" à chaque exécution. L'ordre des étapes dans la macro est un peu bizarre (faire une nouvellef
ligne, copie bloc par bloc, réutiliser la taille du bloc visuel pour mettre0
s dans laf
ligne), mais c'est la variante la plus rapide que j'ai trouvée.la source
Pyth, 26 octets
Port de ma réponse Python.
la source
J,
4634 octetsJe travaille sur le golf, mais ce bébé aime rester à 46 octets ...Plus maintenant! -12 octets grâce aux miles!Essayez-le en ligne! :RÉ
Résultat
Pour cette réponse, j'avais besoin (idéalement) d'un verbe avec rang
0 1
afin de l'utiliser dans lau"v
définition du rang; cependant, des milles ont observé que0 _
c'était suffisant pour la tâche à accomplir.Vous voyez ici un tas de représentations de chaînes de verbes avec leurs rangs respectifs. Ceci est le script que j'ai utilisé pour le générer.
la source
0 _
est très bien ici. Vous pouvez le raccourcir à 34 octets avec'0x',"1'5','3','0f'(128$#)"{~2^i.7
En fait , 25 octets
Essayez-le en ligne!
Cette solution utilise le fait que
f(n) = 2**512//(2**2**n + 1)
(où//
est la division au sol) pour calculer les valeurs.Explication:
la source
JavaScript (Firefox 30+),
139113112928380 octetsEnfin, frappez le sweet spot récursif :-) Utilise une compréhension de chaîne pratique pour économiser 3 octets sur
.map
:.replace
est également de 83 octets:Si une nouvelle ligne de tête était autorisée, ce serait également 80 octets:
la source
Python 2 , 60 octets
Essayez-le en ligne!
la source
Bubblegum , 65 octets
Réponse Bubblegum obligatoire.
la source
Haskell,
8472 octetsPortage de @ orlp's answer:
Alternatives de 94 octets sans la puissance de
Text.Printf
:la source
Control.Monad
dans le REPL. Fixé.PowerShell v2 +, 68 octets
PowerShell n'a pas d'entiers de précision arbitraire sans utiliser d'
[bigint]
appels, et ceux-ci ne peuvent pas être facilement convertis en hexadécimal, donc nous traitons plutôt cela comme un défi basé sur des chaînes.La première ligne gère la répétition
5
et3
en faisant simplement une multiplication de chaîne sur les128
caractères et en clouant un0x
sur le devant.La ligne suivante passe de
$a=1
à7
, chaque itération produisant une autre chaîne. Encore une fois , nous avons le0x
cloués sur l'avant, et nous faisons la multiplication des cordes au milieu pour construire le nombre approprié de0
etf
concaténés, et puis en faisant la multiplication de chaîne de ce sur le nombre de caractères. Notez que nous utilisons$a
ici une variable , et non le compteur de boucles$_
, donc nous pouvons correctement mettre à l'échelle (sinon nous aurions besoin de boucler comme1,2,4,8,16,32,64|%{...}
, ce qui est plus long).Les chaînes résultantes sont laissées sur le pipeline, et la sortie via implicite
Write-Output
se produit à la fin du programme, avec une nouvelle ligne entre les éléments.la source
V , 43 octets
Essayez-le en ligne!
Cela utilise l'un des regex compressés les plus longs dont j'ai jamais eu besoin dans une réponse V. Voici la version la plus lisible, où j'ai ajouté un octet pour les expressions rationnelles lisibles et changé le caractère d'échappement non imprimable en
<esc>
Explication (en utilisant la version lisible):
la source
JavaScript (ES6),
747270 octetsInclut la nouvelle ligne de fin facultative.
Afficher l'extrait de code
la source
Pyth -
3130 octetsPour obtenir un motif, sauf pour le
3
et5
le, il réduit cumulativement, en doublant à chaque fois les morceaux.Essayez-le en ligne ici .
la source
Lot, 216 octets
la source
Vim 72 octets
TryItOnline!
Non imprimables:
Les 4
@w
s à la fin me dérangent, mais parce que je comptais sur le@q
pour échouer à la fin d'une ligne, il échoue également le @w. Je pourrais essayer d'exécuter q 32 fois et voir si cela gâche les lignes suivantes.la source
C, 146 octets
Non golfé:
la source
brainfuck , 211 octets
Essayez-le en ligne!
la source
x
générateur peut être déplacé hors de la boucle maintenantGNU sed 4.2.2 , 77
Essayez-le en ligne.
la source
Rubis ,
66 6045 octetsEssayez-le en ligne!
Idée volée à orlp
la source
C #, 168 octets
la source
Stax , 19 octets
Exécuter et déboguer
Déballé, non golfé et commenté, il ressemble à ceci.
Exécutez celui-ci
la source
/// , 193 octets
Essayez-le en ligne!
la source