introduzione
Un codice grigio è un'alternativa alla rappresentazione binaria in cui un numero viene incrementato alternando solo un bit, anziché una quantità variabile di bit. Ecco alcuni codici grigi insieme ai loro equivalenti decimali e binari:
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
Schema bit bit di un codice grigio
A volte chiamato "binario riflesso", la proprietà di cambiare solo un bit alla volta è facilmente raggiungibile con modelli di bit ciclici per ogni colonna a partire dal bit meno significativo:
bit 0: 0110011001100110011001100110011001100110011001100110011001100110
bit 1: 0011110000111100001111000011110000111100001111000011110000111100
bit 2: 0000111111110000000011111111000000001111111100000000111111110000
bit 3: 0000000011111111111111110000000000000000111111111111111100000000
bit 4: 0000000000000000111111111111111111111111111111110000000000000000
bit 5: 0000000000000000000000000000000011111111111111111111111111111111
...e così via.
Obbiettivo
Data una stringa di input non riempita di un codice grigio, incrementa il codice grigio alternando un singolo carattere nella sequenza o anteponendo un 1
(quando si incrementa alla potenza successiva di 2), quindi emette il risultato come un codice grigio non imbottito.
Avvertenze
- Non preoccuparti di prendere
0
o una stringa vuota come input. - L'input più basso sarà
1
e non c'è limite superiore alla lunghezza della stringa oltre alle limitazioni di memoria imposte dall'ambiente. - Per stringa non imbottita, intendo dire che non ci saranno spazi bianchi iniziali o finali (diversi da una nuova riga finale opzionale) e nessun carattere iniziale
0
nell'input o nell'output.
Formati I / O
I seguenti formati sono accettati per input e output, ma le stringhe sono incoraggiate rispetto ad altri formati:
- "bit" più significativo per primo
- non-riempito array di caratteri ASCII o stringa di
'1'
s e'0'
s - array intero non imbottito di
1
s e0
s - array booleano non imbottito
Cosa non è permesso:
- "bit" meno significativo per primo
- intero decimale, binario o unario
- struttura dati a lunghezza fissa
- matrice di caratteri o stringa di indici ASCII non stampabili
1
e0
test
input -> output
1 -> 11
11 -> 10
111 -> 101
1011 -> 1001
1111 -> 1110
10111 -> 10110
101100 -> 100100
100000 -> 1100000
Altri test possono essere aggiunti su richiesta.
criteri
Questo è code-golf , quindi vince il programma più breve in byte! Tutti i legami verranno spezzati favorendo precedenti invii; si applicano scappatoie standard. La migliore risposta inviata verrà accettata il 9 ottobre 2016 e aggiornata ogni volta che verranno fornite risposte migliori.
0011
Per 8