Бит плавает от LSB к MSB, перемещаясь на одну позицию каждый раз, пока не достигнет верхней части контейнера:
0000
0001
0010
0100
1000
Как только один бит всплывает наверх, другой бит начинает свое путешествие и останавливается, когда встречается другой бит:
1001
1010
1100
Это происходит до тех пор, пока контейнер не будет заполнен битами:
1101
1110
1111
Вызов
Учитывая целое число, выведите « Последовательность битов » для контейнера с таким количеством битов.
- Каждый член последовательности может быть отделен любым разделителем по вашему выбору.
- Редактирование : Последовательность должна быть показана в виде десятичной целых чисел, начиная с первыми термами:
0
. - Размер контейнера должен быть больше нуля и вплоть до количества бит самого большого целого числа, поддерживаемого выбранным вами языком. Вы можете предположить, что входные данные всегда соответствуют этому требованию.
Примеры
Требуется только числовая последовательность, двоичное представление показано в качестве примера:
За 1 :
0 1
0 -> 0 1 -> 1
Для 3 :
0 1 2 4 5 6 7
000 -> 0 001 -> 1 010 -> 2 100 -> 4 101 -> 5 110 -> 6 111 -> 7
Для 4 :
0 1 2 4 8 9 10 12 13 14 15
0000 -> 0 0001 -> 1 0010 -> 2 0100 -> 4 1000 -> 8 1001 -> 9 1010 -> 10 1100 -> 12 1101 -> 13 1110 -> 14 1111 -> 15
Для 8 :
0 1 2 4 8 16 32 64 128 129 130 132 136 144 160 192 193 194 196 200 208 224 225 226 228 232 240 241 242 244 248 249 250 252 253 254 255
00000000 -> 0 00000001 -> 1 00000010 -> 2 00000100 -> 4 00001000 -> 8 … … … 11111000 -> 248 11111001 -> 249 11111010 -> 250 11111100 -> 252 11111101 -> 253 11111110 -> 254 11111111 -> 255
[0.0, 1.0]
0 -> [0, 1]
Ответы:
05AB1E , 10 байтов
Попробуйте онлайн!
источник
.0
по умолчанию числа с плавающей точкой , но не уверен. Лично я обычно помещаюï
нижний колонтитул в симпатичную печать и не включаю его в подсчет байтов.Python 2 , 45 байт
Попробуйте онлайн!
Оказывается, короче, чтобы генерировать
2**n
минус каждый член в последовательности для вводаn
. Если мы посмотрим на их двоичное расширение, ниже дляn=5
, мы увидим хороший образец треугольников 1 в двоичных расширениях.Каждое число получается из предыдущего, удаляя самый правый в двоичном расширении, за исключением того, что если бы это было число 0, мы вместо этого вычитаем 1, создавая новый блок из 1, который начинает новый меньший треугольник. Это реализовано как
y=y&y-1or~-y
, гдеy&y-1
есть небольшая хитрость, чтобы удалить крайнюю правую 1, иor~-y
даетy-1
вместо этого, если это значение было 0.Python 2 , 49 байт
Попробуйте онлайн!
Функция, которая печатает, завершается с ошибкой. Более приятная программа ниже оказалась длиннее.
51 байт
Попробуйте онлайн!
источник
Желе ,
1110 байтPort of @Grimy 's 05AB1E answer , так что обязательно проголосуйте за него!
-1 байт благодаря @Grimy .
Попробуйте онлайн.
Объяснение:
источник
R_2
->Ḷ’
для -1.Ḷ
это единственный разумный диапазон , я действительно хотел бы, чтобы 05AB1E имел для этого однобайтовый код.Perl 5 (
-n
),4140 байт-1 байт спасибо Xcali
TIO
"{0,1}"x$_
: строка"{0,1}"
повторяется n раз"0b".
присоединиться к"0b"
glob
: глобальное расширение (декартово произведение)map{
...}
: для каждого элемента/01.*1/||
: пропустить, когда01
что-то следует1
say oct
: преобразовать в десятичную и сказатьисточник
JavaScript (ES6), 43 байта
В случае сомнений используйте метод xnor .
Попробуйте онлайн!
JavaScript (ES6),
59 57 5552 байтаПопробуйте онлайн!
Как?
комментарии
источник
Python 2 ,
9576 байтПопробуйте онлайн!
источник
Perl 6 , 43 байта
Попробуйте онлайн!
Блок анонимного кода, который принимает число и выводит последовательность, разделенную переводами строки. Это работает, начиная с 0, повторенных n раз, затем заменяя либо
01
на10
или последним0
на1
пока число не станет равным единице.Или 40 байтов, используя подход Науэля Фуйе
Попробуйте онлайн!
источник
01
на10
или последним0
на,1
пока число не станет равным единице ». Это гениальный ход!Python 2 , 60 байт
Попробуйте онлайн!
Python 3 , 76 байт
Попробуйте онлайн!
источник
Python 2 , 67 байт
Попробуйте онлайн!
источник
Python 3 , 62 байта
Попробуйте онлайн!
Идея более или менее совпадает с решением @ Arnauld's .
Еще одно 65-байтовое решение:
Попробуйте онлайн!
источник
Желе , 12 байт
Попробуйте онлайн!
источник
05AB1E ,
1312 байт-1 байт благодаря @Grimy (также посмотрите на его более короткий подход здесь).
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
oL<ʒbIj1Û1¢2‹
. Не похоже, что я могу получить это ниже.oL<ʒbIj1ÛSO2‹
и пытался увидеть, где моя ошибка. :) Но я рад, что вы не можете найти более короткую версию для одного из моих ответов для разнообразия. ; p (inb4 ты найдешь более короткий xD)SO2‹
может быть 3 байта, может быть, как-то, но я не вижу этого, а также не совсем уверен ... Есть некоторые альтернативы, напримерSO1~
илиSÆ>d
, но я не могу найти 3-байтовый.SO!
. Я уверен, что у меня есть несколько старых ответов,2‹
которые тоже могли бы извлечь из этого пользу.Сетчатка , 26 байт
Попробуйте онлайн! Выходы в двоичном виде. Если это не приемлемо, то для 39 байтов:
Попробуйте онлайн!Объяснение:
Преобразовать ввод в строку
n
нулей.Сопоставьте все возможные непустые подстроки.
Для каждой подстроки выведите: префикс с
0
s изменен на1
s; суффикс; совпадение с исходным0
изменено на1
.Преобразовать из двоичного в десятичное.
источник
Брахилог , 27 байт
Попробуйте онлайн!
Выходы не по порядку и с дубликатами. Если это не хорошо, придерживайтесь
do
конца.источник
Древесный уголь , 19 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Perl 5 , 40 байт
Попробуйте онлайн!
источник
Сетчатка , 24 байта
Выходы в двоичном виде. У ввода должен быть завершающий перевод строки.
Попытка объяснения:
Я попытался избежать
/0/
опции регулярного выражения длиной 3 байта , переставив параметры, но не смог.Попробуйте онлайн!
источник
C (лязг) , 73 байта
Попробуйте онлайн!
источник
k4,
2824 байтаПодход @ Grimy портирован на k4
редактировать: -4 благодаря ngn!
источник
!:'1+|!:
->|,\!:
xexp
|,\!:
кажется, теперь так очевидно, что я это вижу!