Der Gray-Code ist eine Folge von Binärzahlen mit Bitbreite, bei n
denen sich aufeinanderfolgende Zahlen nur in einem Bit unterscheiden (siehe Beispielausgabe).
Beispieleingabe:
3
Beispielausgabe:
000
001
011
010
110
111
101
100
Anmerkungen:
- Diese Frage scheint betrogen zu sein , ist es aber nicht, denn diese Frage ist kein Code-Golf und erfordert eine andere Ausgabe. Es wird jedoch hilfreich sein, die Antworten zu überprüfen.
- Sie können eine Variable annehmen,
n
die die Eingabe enthält.
Antworten:
JavaScript (77)
Browserfreundlichere Version (console.log und prompt ()):
quelle
for(i=0;i<(l=1<<n);i++)console.log((i^(i>>1)|l).toString(2).slice(1));
Python 2 (47)
Der Ausdruck
i/2^i
für diei
'graue Codenummer stammt aus dieser Antwort . Um führende Nullen hinzuzufügen, die die Länge auffüllen,n
füge ich2**n
vor der Konvertierung in eine Binärzeichenfolge eine Länge hinzun+1
. Dann schneide ich das1
Präfix für den führenden und den Zahlentyp0b
mit ab[3:]
.quelle
K (ngn / k) , 10 Bytes
Probieren Sie es online aus!
quelle
!
überraschte mich. sehr cool !APL (Dyalog Classic) , 11 Bytes
Probieren Sie es online aus!
n⍴2
ist2 2...2
- ein Vektor vonn
zwei⍳
ist der Index einesn
eindimensionalen Arrays mit Form2 2...2
, dh eines 2 × 2 × ... × 2-Arrays verschachtelter Vektoren. Da wir 0-indexing (⎕IO←0
) verwenden, sind dies alles binäre Vektoren der Längen
.,
Reduzieren Sie die 2 × 2 × ... × 2-Form, sodass Sie einen Vektor von 2 n verschachtelten binären Vektoren erhalten↑
"mix" - konvertiert den Vektorvektor in eine feste 2 n × n-Matrix. Es sieht aus wie das:0,
stellt Nullen links von der Matrix voran2≠/
berechnet das paarweise (2
) xor (≠
) entlang der letzten Dimension (/
im Gegensatz zu⌿
); Mit anderen Worten, jedes Element wird mit seinem rechten Nachbarn xoriert und die letzte Spalte verschwindetquelle
Japt ,
1412 BytesDank ETHproductions zwei Bytes eingespart .
Probieren Sie es online aus!
quelle
ù
Verwendung. DaN.z(n)
es sich um eine Ganzzahldivision mit dem Standardwert arg = 2 handelt, können Sie zwei Bytes speichern mit2pU Ç^z)¤ùTU
: Probieren Sie es online aus!Python - 54
Basierend auf einem Algorithmus aus der in der Herausforderung angegebenen Referenz:
Ungolfed:
quelle
PowerShell (168)
Amateur PowerShell'r zurück mit einem weiteren Versuch von GolF! Hoffe es macht dir nichts aus! Zumindest machen diese Fragen Spaß und sind eine Lernerfahrung. Unter der Annahme, dass n eingegeben wurde, haben wir:
Da die PowerShell, mit der ich arbeite, nur 2.0 ist, kann ich keine Bit-Shifting-Cmdlets verwenden, die zu kürzerem Code führen könnten. Also habe ich den Vorteil einer anderen Methode nahm beschrieben in der Frage Quelle , um das Array Spiegeln und Hinzufügen zu sich selbst, eine 0 an der Vorderseite der oberen Hälfte und eine 1 in die untere Hälfte anhängt.
quelle
F #
(86)(84)(80)Dies könnte wahrscheinlich weiter verbessert werden.
Wenn Sie in FSI ausgeführt werden, müssen Sie dies zuerst tun
open System;;
. Wenn Sie den Import vermeiden möchten (und sich nicht für die Reihenfolge interessieren, in der die Werte gedruckt werden), können Sie diese 82-stellige Version verwenden:quelle
Rubin -
4239Gleicher Algorithmus, andere Sprache:
Wenn Sie von
#map
zu#times
@voidpigeon wechseln, werden 3 Zeichen gespeichert.quelle
[*0...2**n].map
Sie verwenden(2**n).times
.J, 24 Bytes
Probieren Sie es online aus!
Einfache Implementierung des Algorithmus "XOR mit eigener Bodenhälfte". Beachten Sie, dass dies
22 b.
XOR ist.quelle
MATL , 10 Bytes
Probieren Sie es online aus!
Die gute alte "XOR n mit n >> 2" Methode.
W
- 2 ^ berechnen (Eingabe) (wird implizit eingegeben):q
- Zahlenbereich von 0 bis 2 erstellen ^ n - 1t
- diesen Bereich duplizieren2/k
- MATL hat keine Bitverschiebung, also dividieren Sie (jede Zahl) durch 2 undZ~
bodenweise XOR Dieses Ergebnis mit dem ursprünglichen Array 0 bis 2 ^ n - 1B
- Konvertieren Sie jede Zahl im Ergebnis in eine Binärzahl(implizite Ausgabe anzeigen.)
quelle
K (ngn / k) , 25 Bytes
Probieren Sie es online aus!
|:\x
ist "Reverse Scan x". Wendet umgekehrt auf x an, bis die Ausgabe der Eingabe entspricht, und zeigt jede Iteration an. gibt beim ersten Durchgang (0 1; 1 0) zurück.0 1,''
ist "0 1 jeweils verbinden". verbindet eine 0 mit jedem Wert des 1. Elems und eine 1 mit jedem Wert des 2. Elems, was ((0 0; 0 1); (1 1; 1 0)) beim ersten Durchgang ergibt,/
ist "Join Over" und wird zur Liste abgeflacht.(x-1){...}/0 1
ist "wende {func} über0 1
x-1 mal an". Nimmt die Ausgabe der letzten Iteration als Eingabequelle
APL (22)
Dies gibt eine n-mal-2 ^ n-Matrix aus, die die Bits als ihre Zeilen enthält:
Erläuterung:
{
...}⍣(n-1)⍪0 1
: Führen Sie die Funktionszeitenn-1
mit der ersten Eingabe der Matrix aus(0 1)T
(dies ist der 1-Bit-Graucode).(0,⍵)
: jede Zeile⍵
mit einem0
Präfix,⍪
: auf,1,⊖⍵
: Jede Zeile⍵
mit einem1
Präfix in umgekehrter Reihenfolgequelle
Jq 1,5 ,
105100 BytesAngenommen, N liefert Eingaben. z.B
Erweitert
Probieren Sie es online aus!
quelle
Japt , 10 Bytes
Probieren Sie es online aus!
quelle
T-SQL 134
Diese Herausforderung besteht darin, die kartesische Kraft von {(0), (1)} zurückzugeben. Dieses Snippet erstellt den Code, der das kartesische Produkt von {(0), (1)} n Mal ausführen würde.
quelle