Добрел до подготовки к программированию — сквозь чудесное празднование с Солнцем, дебри домашних мантушек, "Ликвидацию" и поиски картридера, — таки шо я имею вам сказать. Коды Грея самокопирующие, точнее, зеркалящие. Дядя Зина нам в лекции предлагает строить с помощью дополнительного массива Y длинной 2 в степени n, в котором хранятся номера элементов, которые нужно поменять. А Солнце делал все через string и приписывал в первой половине к началу 0, а во второй — 1. Несколько минут назад, я, помучившись, вывел жу-у-уткую зависимость между номерами шагов (для удобства, от нуля) и номерами меняемых элементов. Причем, считаем справа налево, от нуля и воспользуемся свойством Кодов Грея — честно, мне стыдно и лень спрашивать, какую он там бахнул черную магию, поэтому будем-с изобретать велосипед, — самокопированием.

0 — 0000 — 0 4 — 0110 — 0 8 — 1100 — 0 12 — 1010 — 0
1 — 0001 — 1 5 — 0111 — 1 9 — 1101 — 1 13 — 1011 — 1
2 — 0011 — 0 6 — 0101 — 0 10 — 1111 — 0 14 — 1001 — 0
3 — 0010 — 2 7 — 0100 — 3 11 — 1110 — 2 15 — 1000 — 4

На каждый четный номер шага меняем нулевой элемент. Дефолтно начало первых трех во вспомогательном массиве — это {0, 1, 0}. После них меняем элемент под номером номер максимального элемента, увеличенный на единичку. А далее копируем все, что меняли до этого. Закончили копировать, снова меняем, уже третий элемент, и копируем. и так, пока не надоест. Все, я пошел. Изначально думал привязывать к степеням двойки, но там такая дичь, что я решил не выеживаться

ЗЫ., Все оказалось куда как изящнее. Связь кода Грея с двоичным: старшие разряды совпадают, а следующие являются результатом сложения настоящего и следующего разряда по модулю два.