Einführung
Ein Gray-Code ist eine Alternative zur binären Darstellung, bei der eine Zahl durch Umschalten nur eines Bits anstatt einer variablen Anzahl von Bits inkrementiert wird. Hier sind einige Graucodes zusammen mit ihren Dezimal- und Binäräquivalenten:
decimal | binary | gray
-------------------------
0 | 0 | 0
-------------------------
1 | 1 | 1
-------------------------
2 | 10 | 11
-------------------------
3 | 11 | 10
-------------------------
4 | 100 | 110
-------------------------
5 | 101 | 111
-------------------------
6 | 110 | 101
-------------------------
7 | 111 | 100
-------------------------
8 | 1000 | 1100
-------------------------
9 | 1001 | 1101
-------------------------
10 | 1010 | 1111
-------------------------
11 | 1011 | 1110
-------------------------
12 | 1100 | 1010
-------------------------
13 | 1101 | 1011
-------------------------
14 | 1110 | 1001
-------------------------
15 | 1111 | 1000
Zyklisches Bitmuster eines Gray Codes
Manchmal als "gespiegelte Binärdatei" bezeichnet, wird die Eigenschaft, immer nur ein Bit zu ändern, leicht mit zyklischen Bitmustern für jede Spalte erreicht, beginnend mit dem niedrigstwertigen Bit:
bit 0: 0110011001100110011001100110011001100110011001100110011001100110
bit 1: 0011110000111100001111000011110000111100001111000011110000111100
bit 2: 0000111111110000000011111111000000001111111100000000111111110000
bit 3: 0000000011111111111111110000000000000000111111111111111100000000
bit 4: 0000000000000000111111111111111111111111111111110000000000000000
bit 5: 0000000000000000000000000000000011111111111111111111111111111111
...und so weiter.
Zielsetzung
Inkrementieren Sie bei einer nicht aufgefüllten Eingabezeichenfolge eines Gray-Codes den Gray-Code, indem Sie ein einzelnes Zeichen in der Sequenz abwechseln oder a voranstellen 1
(beim Inkrementieren zur nächsten Zweierpotenz ), und geben Sie dann das Ergebnis als nicht aufgefüllten Gray-Code aus.
Vorbehalte
- Machen Sie sich keine Sorgen,
0
wenn Sie eine leere Zeichenfolge als Eingabe verwenden. - Die niedrigste Eingabe
1
ist und es gibt keine Obergrenze für die Zeichenfolgenlänge außer den durch die Umgebung auferlegten Speicherbeschränkungen. - Mit ungepolsterter Zeichenfolge meine ich, dass es kein führendes oder nachfolgendes Leerzeichen (außer einem optionalen nachfolgenden Zeilenumbruch) und keine führenden Zeichen
0
in der Eingabe oder Ausgabe gibt.
E / A-Formate
Die folgenden Formate werden als Eingabe- und Ausgabeformate akzeptiert, Zeichenfolgen werden jedoch gegenüber anderen Formaten empfohlen:
- höchstwertiges "Bit" zuerst
- unwattierter Zeichen - Array oder eine Kette von ASCII
'1'
s und'0'
s - ungepolstertes Integer-Array von
1
s und0
s - nicht gepolstertes boolesches Array
Was ist nicht erlaubt:
- niedrigstwertiges "Bit" zuerst
- Dezimalzahl, binäre oder unäre Ganzzahl
- Datenstruktur mit fester Länge
- Zeichenarray oder Zeichenfolge aus nicht druckbaren ASCII-Indizes
1
und0
Tests
input -> output
1 -> 11
11 -> 10
111 -> 101
1011 -> 1001
1111 -> 1110
10111 -> 10110
101100 -> 100100
100000 -> 1100000
Weitere Tests können auf Anfrage hinzugefügt werden.
Kriterien
Das ist Code-Golf , also gewinnt das kürzeste Programm in Bytes! Alle Bindungen werden durch die Bevorzugung früherer Einreichungen aufgehoben; Es gelten Standardlücken. Die am besten eingereichte Antwort wird am 9. Oktober 2016 akzeptiert und aktualisiert, sobald bessere Antworten gegeben werden.
0011
für 8