Introdução
Um código cinza é uma alternativa à representação binária na qual um número é incrementado alternando apenas um bit, em vez de uma quantidade variável de bits. Aqui estão alguns códigos em cinza, juntamente com seus equivalentes decimais e binários:
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
Padrão de bit cíclico de um código cinza
Às vezes chamada de "binário refletido", a propriedade de alterar apenas um bit de cada vez é facilmente alcançada com padrões de bits cíclicos para cada coluna a partir do bit menos significativo:
bit 0: 0110011001100110011001100110011001100110011001100110011001100110
bit 1: 0011110000111100001111000011110000111100001111000011110000111100
bit 2: 0000111111110000000011111111000000001111111100000000111111110000
bit 3: 0000000011111111111111110000000000000000111111111111111100000000
bit 4: 0000000000000000111111111111111111111111111111110000000000000000
bit 5: 0000000000000000000000000000000011111111111111111111111111111111
...e assim por diante.
Objetivo
Dada uma sequência de entrada não preenchida de um código cinza, aumente o código cinza alternando um único caractere na sequência ou acrescentando a 1
(ao aumentar para a próxima potência de 2) e, em seguida, imprima o resultado como um código cinza não preenchido.
Ressalvas
- Não se preocupe em pegar
0
uma string vazia ou como entrada. - A entrada mais baixa será
1
e não há limite superior para o comprimento da cadeia, exceto as limitações de memória impostas pelo ambiente. - Por sequência não preenchida, quero dizer que não haverá espaços em branco à esquerda ou à direita (exceto uma nova linha à direita) e nem
0
s na entrada ou saída.
Formatos de E / S
Os seguintes formatos são aceitos para entrada e saída, mas as cadeias são incentivadas em relação a outros formatos:
- "bit" mais significativo primeiro
- array de caracteres não-acolchoado ou seqüência de ASCII
'1'
s e'0'
s - matriz inteira não preenchida de
1
s e0
s - matriz booleana não acolchoada
O que não é permitido:
- "bit" menos significativo primeiro
- número inteiro decimal, binário ou unário
- estrutura de dados de comprimento fixo
- matriz de caracteres ou sequência de índices ASCII não imprimíveis
1
e0
Testes
input -> output
1 -> 11
11 -> 10
111 -> 101
1011 -> 1001
1111 -> 1110
10111 -> 10110
101100 -> 100100
100000 -> 1100000
Mais testes podem ser adicionados por solicitação.
Critério
Isso é código-golfe , e o programa mais curto em bytes vence! Todos os laços serão rompidos favorecendo envios anteriores; lacunas padrão se aplicam. A melhor resposta enviada será aceita em 9 de outubro de 2016 e atualizada sempre que melhores respostas forem fornecidas.
0011
para 8