Последовательность содержит десятичное представление двоичных чисел вида:, 10101...
где n-й член имеет n битов.
Последовательность, вероятно, проще всего объяснить, просто показывая отношения между двоичным и десятичным представлениями чисел:
0 -> 0
1 -> 1
10 -> 2
101 -> 5
1010 -> 10
10101 -> 21
101010 -> 42
Вызов:
Возьмите входное целое число n
и верните первые n чисел в последовательности. Вы можете выбрать последовательность 0 или 1.
Тестовые случаи:
n = 1 <- 1-indexed
0
n = 18
0, 1, 2, 5, 10, 21, 42, 85, 170, 341, 682, 1365, 2730, 5461, 10922, 21845, 43690, 87381
Пояснения приветствуются, как всегда.
Это OEIS A000975 .
[85,[42,[21,[10,[5,[2,[1,0]]]]]]]
?Ответы:
Python 2 , 36 байт
Попробуйте онлайн! Пояснение: двоичное представление ,так что просто остается умножить его на соответствующую степень 2 и взять целую часть.23
0.101010101...
источник
05AB1E , 4 байта
2 байта сохранены с помощью трюка Нила 2/3
Попробуйте онлайн!
объяснение
05AB1E , 6 байтов
Попробуйте онлайн!
объяснение
источник
Желе ,
...4 байтаСпасибо миль за -1 байт!
Попробуйте онлайн!
Объяснение:
Желе , 4 байта
Версия Джонатана Аллана.
Попробуйте онлайн!
Версия, основанная на трюке Нила 2/3, дает 5 байтов, см. Историю изменений.
источник
ḶḂḄƤ
для этого был сделан быстрый префиксḶ€ḂḄ
тоже сработает.MATL , 5 байтов
На основании ответа Нейла .
объяснение
Попробуйте онлайн!
MATL , 9 байт
Попробуйте онлайн!
объяснение
источник
Python 2 ,
453736 байт-3 байта благодаря user202729
-1 байт благодаря mathmandan
Попробуйте онлайн!
источник
s
- это то же самое, что добавлениеs
к самому себе, поэтому я думаю, что вы можете сделать это,s+=s+~s%2
чтобы сохранить байт.Python 3,
6861544843 байтаСпасибо user202729 за помощь в сохранении 19 байтов и ов за помощь в сохранении 6 байтов.
Попробуйте онлайн
источник
x == 0
эквивалентно целому числуnot x
ifx
, перестановка операндов (т. Е.x if c else y
=y if not c else x
) Сохранит еще несколько байтов.i%2
и использовать1-r%2
вместо этогоi
.Шелуха , 7 байт
Попробуйте онлайн!
На основе 1, поэтому ввод n дает первые n результатов.
объяснение
источник
APL (Dyalog Unicode) , 11 байтов SBCS
Предполагается
⎕IO
( я ndex O rigin)0
, что по умолчанию во многих системах. Функция анонимного молчаливого префикса. 1-индексироваться.Попробуйте онлайн!
⍳
ɩ ndices 0 ... п-1(
…)¨
Применить следующую молчаливую функцию к каждому⍴∘1 0
циклически изменить список[1,0]
до такой длины2⊥
преобразовать из base-2 (двоичного) в нормальное числоисточник
Perl
v5.10
-n
, 24 + 1 байт-3 байта благодаря Науэлю Фуйе !
Попробуйте онлайн!
Та же логика, что и в моей версии Ruby, но короче, потому что perl более лаконичен. По какой-то странной причине
print
не стоит использовать разделитель (черт возьми!), Поэтому мне пришлось использоватьsay
fromv5.10;
для того, чтобы это запустилось, я не уверен, как это забить, поэтому я оставляю это сейчас ?. ..объяснение
источник
-n
) = 28 байт, потому что для запуска однострочного perl нужно использовать,-e
а чтобы использовать 5.10, вам просто нужно использовать-E
ту же длину$|--
вместо($.^=1)
Haskell , 33 байта
Попробуйте онлайн!
источник
APL (Дьялог) , 7 байт
Попробуйте онлайн!
APL (Дьялог) , 11 байт
Попробуйте онлайн!
Использует
⎕IO←0
.источник
⎕IO←0
(но утверждайте, что это 1-индексированный!) И измените0,
на1+
:(2⊥2|⍳)¨1+⍳
C ,
81 5559 байт1 проиндексировано.
Полная программа, меньше гольфа:
Попробуйте онлайн!
РЕДАКТИРОВАТЬ 2: Я был при условии, что функции не должны были быть повторно использованы теперь, когда я думаю об этом, имеет смысл, что они должны быть повторно использованы: P
РЕДАКТИРОВАТЬ: я был под неправильным представлением, что я должен был включить всю программу в ответ, оказывается, мне нужна была только функция, которая делает это. Это мило.
Я прилично уверен, что смогу сбрить несколько байтов здесь и там. Я уже использовал несколько трюков. Большая часть программы посвящена получению аргумента и превращению его в int. Это мой первый кодовый гольф. Если я делаю что-то не так, скажите мне: P
источник
i++
и изменивi&1
наi++&1
. Кроме того , хотя в качестве глобальных переменныхi
иj
инициализируются нулем на начальном этапе, они должны быть инициализированы внутри функции, так как функция представления должны быть многоразовым .i,j;f(c){for(i=j=0;i<c;)printf("%d ",j+=j+i++%2);}
попробуйте онлайн!Haskell ,
47405349444034 байта-4 байта благодаря пользователю 202729
-6 байтов благодаря лайкони
Попробуйте онлайн!
источник
otherwise
на например1>0
(otherwise == True
)Рубин , 26 байт
Попробуйте онлайн!
Бьет все старые рубиновые ответы.
объяснение
1/3
в двоичном виде выглядит так0.01010101...
, так что если вы умножите его на степени двух, вы получите:Но Руби записывает числа на деление, давая мне последовательность, которая мне нужна.
источник
J , 9 байт
Как это работает?
i.
- список 0..n-12|
- список предметов мод 2\
- все префиксы#.
- в десятичной[:
- закрывает вилку (так как у меня четное число (4) глаголов)Попробуйте онлайн!
источник
Сетчатка , 28 байт
Попробуйте онлайн!
На основе 0, поэтому вход n дает первое n + 1 результаты.
объяснение
Использует рекурсию из OEIS:
Давайте пройдемся по программе:
Это постоянный этап: он отбрасывает ввод и устанавливает рабочую строку в
0
качестве начального значения последовательности.)
Обертывает эту стадию в группе. Эта группа сама по себе ничего не делает, но почти каждый этап (включая групповые этапы) записывает свой результат в журнал, и нам потребуется две копии0
этого журнала для работы программы.Здесь есть куча настроек:
"$+"+
оборачивает сцену в цикл. Значение"$+"
рассматривается как замена и$+
относится к входу программы, т.е. n . Это означает, что цикл запущен n раз.Затем
¶<
оборачивает каждую итерацию в выходной этап, который печатает входные данные этапа с завершающим переводом строки (поэтому первая итерация печатает ноль, вторая итерация печатает результат первой итерации и т. Д.).Сам этап заменяет всю рабочую строку с подстановкой в последней строке. Тот использует неявные закрывающие скобки и неявные аргументы для оператора повторения
*
, так что на самом деле это сокращение от:Материал внутри скобок можно разбить на три части:
$&*_
: дает строку из (n-1)_
s._
: дает сингл_
.2*$-1*_
: дает строку 2 * a (n-1)_
.$-1
Относится к результату предпоследнего в журнале результата, т.е. итерации цикла до последнего. Вот почему нам нужно было сначала скопировать ноль в журнале, иначе это будет относиться к вводу программы на первой итерации.Затем
$.(…)
измеряет длину полученной строки. Другими словами, мы вычислилиa(n) = a(n-1) + 1 + 2*a(n-2)
, пройдя через унарный (хотя на самом деле это не так:$.(…)
он ленив и фактически не оценивает его содержимое, если он может определить результирующую длину непосредственно с помощью арифметики, так что это даже довольно эффективно).Результат последней итерации цикла ( n + 1- й элемент последовательности) печатается из-за неявного вывода Retina в конце программы.
источник
Brain-Flak , 36 байт
Попробуйте онлайн!
Объяснение:
Следующее число в последовательности получается с помощью
n*2+1
илиn*2+0
.источник
Рубин
42 41 43 41 37 35 31 3330 байт-2 байта благодаря Unihedron
-3 байта благодаря ГБ
Попробуйте онлайн!
источник
->x{a=0;x.times{a-=~a+p(a)%2}}
> <> , 22 + 3 (-v флаг) байта
Попробуйте онлайн!
объяснение
Стек инициализируется с помощью счетчика цикла.
источник
Java 8,
115818052 байтаПорт ответа @Neil 's Python 2 .
1 индексируется и выводится напрямую, каждое значение в отдельной строке.
Объяснение:
Попробуйте онлайн.
Старый 80-байтовый ответ:
1-индексированный ввод и разделенный пробелами
String
выводОбъяснение:
Попробуйте онлайн.
источник
Perl 6 ,
35 30 27 2520 байтПопробуйте (35)
Попробуйте (30)
Попробуйте (30)
Попробуйте (27)
Попробуйте (25)
Попробуйте (20)
Expanded:
источник
Python 2 , 33 байта
Попробуйте онлайн!
Python 2 , 34 байта
Попробуйте онлайн!
Возвращает в обратном порядке.
источник
C,
4746 байтовАккумулятор
a
начинается с нуля. На каждом шаге мы удваиваем его (a+=a
) и добавляем единицу, если предыдущий младший бит был равен нулю (!(a%2)
или эквивалентно,-(~a)%2
).Тестовая программа
Полученные результаты
источник
Джапт ,
10976 байтВсе полученные независимо от других решений.
1-индексироваться.
Попытайся
объяснение
Попытайся
7-байтовая версия
Попытайся
9-байтовая версия
Попытайся
источник
Haskell , 52 байта
Попробуйте онлайн!
источник
MATL , 7 байт
Попробуйте онлайн!
Объяснение:
Вывод был бы,
0, 1, 2, 5 ...
если быP
был добавлен в конец (flip
), делая его 8 байтов.источник
&+
Рубин
-n
,3230 + 1 байтТак как у нас есть ровно 1 строка ввода,
$.
это божественно удобно!РЕДАКТИРОВАТЬ: Я удивлен, что мне удалось превзойти себя, но кажется, что использование
-n
которого считается как 1 (по правилу 2 в особых условиях по умолчанию , так как Ruby может быть запущен сruby -e 'full program'
(таким образом-n
, 1), все экземплярыgets
которого используется только один раз, может ударить по гольфу на 1 символ таким образом; я считаю, что это веха для рубина, пожалуйста, говорите, если вы не согласны с этим ходом мыслей, прежде чем я буду неоднократно использовать его в будущем)Попробуйте онлайн!
объяснение
источник
AWK
a=0
, 31 байтПопробуйте онлайн!
Использует формулу, бесстыдно украденную из этого другого ответа Ruby.
Несмотря на то, что не сработало
a=0
бы (awk рассматривает «пусто» как 0), первый элемент 0 не будет напечатан и вместо этого будетempty
строкой, которая, хотя я бы сказал, что правильный вывод, вероятно, не пройдет, поэтому естьa=0
что быть вставлен в качестве аргумента командной строки.источник
C, 52 байта
1-индексированных
Попробуйте онлайн!
источник
брейкфук , 40 байт
Попробуйте онлайн!
0 индексированные. Вводить как код символа, выводить как унарный с нулевыми байтами, разделяющими серии кодов 1 с. Предполагает 8-битные ячейки, если вы не хотите вводить более 255. Предполагается, отрицательные ячейки, хотя это может быть исправлено за счет нескольких байтов.
Ранее 50 байтов
Попробуйте онлайн!
Входы как код символа, выходы как код символа. 1-индексироваться. Вероятно, можно немного поиграть в гольф.
@Unihedron указывает, что я забыл указать, что для этого нужны ячейки бесконечного размера, в противном случае он занимает 8-е число.
источник