Введение
Серый код является альтернативой двоичного представления , в котором число увеличиваются на переключая только один бит, а не количество переменных бит. Вот некоторые серые коды вместе с их десятичным и двоичным эквивалентами:
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
Циклический битовый код серого кода
Иногда называемый «отраженный двоичный файл», свойство изменения только одного бита за раз легко достигается с помощью циклических битовых комбинаций для каждого столбца, начиная с младшего значащего бита:
bit 0: 0110011001100110011001100110011001100110011001100110011001100110
bit 1: 0011110000111100001111000011110000111100001111000011110000111100
bit 2: 0000111111110000000011111111000000001111111100000000111111110000
bit 3: 0000000011111111111111110000000000000000111111111111111100000000
bit 4: 0000000000000000111111111111111111111111111111110000000000000000
bit 5: 0000000000000000000000000000000011111111111111111111111111111111
...и так далее.
Задача
Если задана не дополняемая входная строка серого кода, увеличьте серый код, чередуя один символ в последовательности или добавив перед ним 1
(при увеличении до следующей степени 2), затем выведите результат в виде не дополненного серого кода.
Предостережения
- Не беспокойтесь о принятии
0
или пустой строке в качестве входных данных. - Наименьший ввод будет
1
, и нет никакой верхней границы для длины строки, кроме ограничений памяти, наложенных средой. - Под незаполненной строкой я подразумеваю, что не будет ни начальных, ни конечных пробелов (кроме необязательного конечного перевода строки), ни начальных
0
s на входе или выходе.
Форматы ввода / вывода
Следующие форматы принимаются для ввода и вывода, но строки приветствуются по сравнению с другими форматами:
- самый значительный «бит» первый
- не дополненный массив символов или строка ASCII
'1'
s и'0'
s - не дополненный массив целых чисел
1
s и0
s - ненасыщенный логический массив
Что не разрешено:
- наименее значимый "бит" первый
- десятичное, двоичное или унарное целое
- структура данных фиксированной длины
- массив символов или строка непечатаемых индексов ASCII
1
и0
тесты
input -> output
1 -> 11
11 -> 10
111 -> 101
1011 -> 1001
1111 -> 1110
10111 -> 10110
101100 -> 100100
100000 -> 1100000
Дополнительные тесты могут быть добавлены по запросу.
критерии
Это код-гольф , поэтому выигрывает самая короткая программа в байтах! Все связи будут разорваны в пользу более ранних представлений; применяются стандартные лазейки. Лучший ответ будет принят 9 октября 2016 года и будет обновляться всякий раз, когда будут предоставлены лучшие ответы.
0011
для 8