Ctrl K

Кольцо с шагом в один бит

Средняя
Нужно выписать все числа от 0 до 2^bits − 1 по кругу так, чтобы любые два соседних числа (включая последнее и первое) отличались ровно одним битом. Используем для этого **зеркальный порядок**: - для 1 бита это 0, 1; - порядок для b бит получается из порядка для b − 1 бит: сначала он сам, затем те же числа в обратном порядке, у каждого из которых включён бит номер b − 1 (старший). Например, для 2 бит получается 0, 1, 3, 2. Верните список из 2^bits чисел в зеркальном порядке, повёрнутый по кругу так, чтобы он начинался с числа start.
Пример 1
bits=2, start=1 → [1, 3, 2, 0]

Зеркальный порядок для 2 бит: 00, 01, 11, 10, то есть 0, 1, 3, 2. Начинаем с 1 и идём по кругу: 1, 3, 2, 0. Соседи, включая пару 0 и 1 на стыке, отличаются одним битом.

Пример 2
bits=3, start=6 → [6, 7, 5, 4, 0, 1, 3, 2]

Порядок для 3 бит: к 0, 1, 3, 2 приписываем их же в обратном порядке с включённым старшим битом — 6, 7, 5, 4. Получаем 0, 1, 3, 2, 6, 7, 5, 4 и поворачиваем так, чтобы первым стало 6.

Пример 3
bits=1, start=0 → [0, 1]
Ограничения
  • 1 ≤ bits ≤ 16
  • 0 ≤ start < 2^bits
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКоды с зеркальным отражением СредняяМеньше всего прямых через точки СредняяЦепочки с квадратными суммами СложнаяXOR каждого подмножества ЛёгкаяДеление без деления Средняя
загружаем Python…
Вход
bits=2, start=1
Ожидается
[1, 3, 2, 0]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 58 тестов на сервере, включая скрытые.