Вступ
Сірий код є альтернативою двійкового представлення , в якому число збільшуються на перемикаючи тільки один біт, а не кількість змінних біт. Ось декілька сірих кодів разом з їх десятковими та двійковими еквівалентами:
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
...і так далі.
Об'єктивна
З огляду на непідставлений вхідний рядок сірого коду, збільшуйте сірий код шляхом чергування одного символу в послідовності або попередньо передбачуючи a 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