Es gibt einen berühmten kniffligen Algorithmus zum Zählen der Anzahl der gesetzten Bits in einer 32-Bit-Ganzzahl ohne Vorzeichen:
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;
}
Ich werde es hier nicht erklären. Stellen Sie sich einen ähnlichen Code für 512-Bit-Ganzzahlen vor! Die hexadezimalen Konstanten wären riesig und würden ein hübsches Muster bilden. Ihre Aufgabe ist es einfach, genau diese Ausgabe zu drucken :
0x55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
0x33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff
0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff
0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff
0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff
0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Bitte keine abschließenden Leerzeichen - eine einzelne abschließende Zeile ist jedoch optional.
Das ist Code-Golf , also gewinnt die kürzeste Antwort (in Bytes).
Antworten:
05AB1E ,
262221 Bytes05AB1E verwendet die CP-1252- Codierung.
Probieren Sie es online!
Erläuterung
Andere Versionen, die möglicherweise verbessert werden
quelle
Python 2,
524946 BytesDie k-te Zahl ist gegeben durch
2**512/(2**2**k + 1)
. Dies gilt für eine 512-Bit-Zahl, daher ist es trivial, das Muster auf verschiedene Breiten zu erweitern.3 Bytes gespart dank Dennis.
3 Bytes gespart dank xnor.
quelle
l=2;exec"print'0x%0128x'%(2**512/-~l);l*=l;"*9
01010101
,00010001
,00000001
und dann diejenigen , multipliziert mit1
,11
,1111
die richtigen binären Muster zu erhalten. Zum Beispiel01010101
können Sie die Formel für eine bestimmte Breite w erhalten, indem Sie tunsum 2^(2*k) for k = 0, w/2 - 1
und herausfinden, dass es ist(2**w - 1)/3
.PHP,
111110108 BytesEin Byte gespart dank @ user59178.
Was ist das Muster für 1024 Bits? : D
quelle
$x<65
anstelle von verwenden$i++<7
. Diesmal habe ich es getestet und alles.Retina , 43 Bytes
Probieren Sie es online!
Erläuterung
Dies macht viel Gebrauch von der allgemein zu wenig genutzten
:
Option, mit der Sie Zwischenergebnisse drucken können, da es viel kürzer ist, eine einzelne Zeile zu ändern, als die gesamte Ausgabe aufzubauen.Dies ersetzt die leere Eingabe durch
0x
gefolgt von 1285
s und druckt sie aus, um die erste Zeile zu erzeugen.Dieser ersetzt das
5
s durch3
s, um die zweite Zeile zu erzeugen und druckt sie ebenfalls aus.Dies ist die letzte Sondergefasste Linie und es stellt sich alle zwei
3
s in0f
die dritte Zeile zu erzeugen. Dies startet auch eine Schleife durch die letzten beiden Stufen ({
). In dieser Phase wird jedoch nach der ersten Iteration nur der aktuelle Status gedruckt. Die;
Unterdrückt die Ausgabe am Ende des Programms zu vermeiden , dass die letzte Zeile duplizieren.Diese Ersetzung transformiert nun jede Zeile in die nächste, indem jedes zweite Paar von
f
s und0
s ausgetauscht wird . Die Bedingung "Jedes zweite Paar" wird durch Abgleichen einer Null vor der erzwungenf
, wodurch es unmöglich wird, aufeinanderfolgende Paare abzugleichen, da Übereinstimmungen nicht überlappen können.quelle
Vim, 32 Bytes
i5<CR>3<Esc>qqYpVrf$<C-V>{yPG1vr0q6@q<C-V>{I0x<Esc>
Ich muss nur das erste
5
und manuell schreiben3
, und das Makro erledigt den Rest und "verdoppelt die Bitanzahl" jedes Mal, wenn es ausgeführt wird. Die Reihenfolge der Schritte im Makro ist etwas seltsam (eine neuef
Zeile blockweise kopieren, die visuelle Blockgröße wiederverwenden, um0
s in dief
Zeile einzufügen), aber es ist die schnellste Variante, die ich gefunden habe.quelle
Pyth, 26 Bytes
Port meiner Python-Antwort.
quelle
J,
4634 BytesIch arbeite daran, das Golf zu spielen, aber dieses Baby mag es, bei 46 Bytes zu bleiben ...Nicht mehr! -12 Bytes dank Meilen!Probieren Sie es online! : D
Ergebnis
Für diese Antwort benötigte ich (idealerweise) ein Verb mit Rang
0 1
, um es in deru"v
Definition von Rang zu verwenden; Meilen beobachteten jedoch, dass dies0 _
für die anstehende Aufgabe ausreichte.Hier sehen Sie eine Reihe von Zeichenfolgendarstellungen der Verben mit ihren jeweiligen Rängen. Dies ist das Skript, mit dem ich es generiert habe.
quelle
0 _
ist hier in Ordnung. Sie können es mit'0x',"1'5','3','0f'(128$#)"{~2^i.7
Eigentlich 25 Bytes
Probieren Sie es online!
Diese Lösung nutzt die Tatsache, dass
f(n) = 2**512//(2**2**n + 1)
(wo//
ist Floored Division), um die Werte zu berechnen.Erläuterung:
quelle
JavaScript (Firefox 30+),
139113112928380 BytesEndlich den rekursiven Sweet Spot erreichen :-) Verwendet ein handliches Dandy-String-Verständnis, um 3 Bytes zu sparen
.map
:.replace
ist auch 83 Bytes:Wenn eine führende Zeile zulässig wäre, wären dies auch 80 Byte:
quelle
Python 2 , 60 Bytes
Probieren Sie es online!
quelle
Bubblegum , 65 Bytes
Obligatorische Bubblegum-Antwort.
quelle
Haskell,
8472 BytesPortierung @ orlps Antwort:
94-Byte-Alternativen ohne die Leistung von
Text.Printf
:quelle
Control.Monad
in der REPL geladen haben . Fest.PowerShell v2 +, 68 Byte
In PowerShell gibt es keine Ganzzahlen mit willkürlicher Genauigkeit, ohne dass
[bigint]
Aufrufe verwendet werden. Diese können nicht einfach in Hexadezimalzahlen konvertiert werden. Wir behandeln dies stattdessen als eine auf Zeichenfolgen basierende Herausforderung.Die erste Zeile behandelt das Wiederholen
5
und3
durch einfaches Multiplizieren von128
Zeichen und Anheften von a0x
auf der Vorderseite.Die nächste Zeile springt ab
$a=1
bis7
, wobei jede Iteration eine andere Zeichenfolge ausgibt. Wieder haben wir0x
das vorne angeheftet, und wir führen eine String-Multiplikation in der Mitte durch , um die entsprechende Anzahl von Zeichen zu konstruieren0
und miteinander zuf
verknüpfen, und führen dann eine String-Multiplikation dieser Zeichen mit der entsprechenden Anzahl von Zeichen durch. Beachten Sie, dass wir hier eine Variable verwenden$a
und nicht den Schleifenzähler$_
, damit wir richtig skalieren können (andernfalls müssten wir eine Schleife wie1,2,4,8,16,32,64|%{...}
, die länger ist).Die resultierenden Zeichenfolgen
Write-Output
verbleiben in der Pipeline und werden implizit nach Abschluss des Programms mit einer neuen Zeile zwischen den Elementen ausgegeben.quelle
V , 43 Bytes
Probieren Sie es online!
Dies verwendet eine der längsten komprimierten regulären Ausdrücke, die ich je in einer V-Antwort benötigt habe. Hier ist die lesbarere Version, in der ich ein Byte für lesbare reguläre Ausdrücke hinzugefügt und das nicht druckbare Escape-Zeichen in geändert habe
<esc>
Erklärung (unter Verwendung der lesbaren Version):
quelle
JavaScript (ES6),
747270 ByteBeinhaltet den optionalen abschließenden Zeilenumbruch.
Code-Snippet anzeigen
quelle
Pyth -
3130 BytesUm ein Muster zu erhalten, wird es mit Ausnahme des
3
's und5
' s kumulativ reduziert, wobei jedes Mal die Stücke verdoppelt werden.Probieren Sie es hier online aus .
quelle
Stapel, 216 Bytes
quelle
Vim 72 Bytes
TryItOnline!
Unbedruckbares:
Die 4
@w
s am Ende nerven mich, aber weil ich mich darauf verlassen habe@q
, dass das am Ende einer Zeile ausfällt, fällt auch das @w aus. Ich könnte versuchen, nur 32-mal q auszuführen und zu sehen, ob es die späteren Zeilen durcheinander bringt.quelle
C 146 Bytes
Ungolfed:
quelle
Brainfuck , 211 Bytes
Probieren Sie es online!
quelle
x
Generator jetzt außerhalb der Schleife bewegt werden kannGNU sed 4.2.2 , 77
Probieren Sie es online aus.
quelle
Ruby ,
66 6045 BytesProbieren Sie es online!
Idee von Orlp gestohlen
quelle
C #, 168 Bytes
quelle
Stax , 19 Bytes
Führen Sie es aus und debuggen Sie es
Entpackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
quelle
/// , 193 Bytes
Probieren Sie es online!
quelle