Introducción
Un código gris es una alternativa a la representación binaria en la que un número se incrementa al alternar solo un bit, en lugar de una cantidad variable de bits. Aquí hay algunos códigos grises junto con sus equivalentes decimales y binarios:
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
Patrón de bits cíclicos de un código gris
A veces llamado "binario reflejado", la propiedad de cambiar solo un bit a la vez se logra fácilmente con patrones de bits cíclicos para cada columna a partir del bit menos significativo:
bit 0: 0110011001100110011001100110011001100110011001100110011001100110
bit 1: 0011110000111100001111000011110000111100001111000011110000111100
bit 2: 0000111111110000000011111111000000001111111100000000111111110000
bit 3: 0000000011111111111111110000000000000000111111111111111100000000
bit 4: 0000000000000000111111111111111111111111111111110000000000000000
bit 5: 0000000000000000000000000000000011111111111111111111111111111111
...y así.
Objetivo
Dada una cadena de entrada no rellenada de un código gris, incremente el código gris alternando un solo carácter en la secuencia o anteponiendo a 1
(cuando se incremente a la siguiente potencia de 2), luego envíe el resultado como un código gris no rellenado.
Advertencias
- No se preocupe por tomar
0
o una cadena vacía como entrada. - La entrada más baja será
1
, y no hay límite superior a la longitud de la cadena que no sean las limitaciones de memoria impuestas por el entorno. - Por cadena sin relleno, quiero decir que no habrá espacios en blanco iniciales o finales (que no sea una nueva línea final opcional), y no habrá
0
s iniciales en la entrada o salida.
Formatos de E / S
Se aceptan los siguientes formatos para entrada y salida, pero se recomiendan cadenas sobre otros formatos:
- "bit" más significativo primero
- matriz de caracteres no acolchada o cadena de ASCII
'1'
sy'0'
s - matriz entera no acolchada de
1
sy0
s - matriz booleana sin relleno
Lo que no está permitido:
- "bit" menos significativo primero
- entero decimal, binario o unario
- estructura de datos de longitud fija
- matriz de caracteres o cadena de índices ASCII no imprimibles
1
y0
Pruebas
input -> output
1 -> 11
11 -> 10
111 -> 101
1011 -> 1001
1111 -> 1110
10111 -> 10110
101100 -> 100100
100000 -> 1100000
Se pueden agregar más pruebas a pedido.
Criterios
Este es el código de golf , ¡así que el programa más corto en bytes gana! Todos los lazos se romperán favoreciendo las presentaciones anteriores; se aplican las lagunas estándar. La mejor respuesta enviada se aceptará el 9 de octubre de 2016 y se actualizará cada vez que se den mejores respuestas.
0011
para 8