Давайте определим последовательность натуральных чисел. Мы определим последовательность на четных числах, чтобы она была вдвое больше предыдущего. Нечетные индексы последовательности будут наименьшим положительным целым числом, еще не появившимся в последовательности.
Вот первая пара терминов.
1,2,3,6,4,8,5,10,7,14,9,18,11,22,12,24,13,26,15,30
Вы также можете думать об этом как о списке сцепленных пар (n, 2n), где n является наименее неиспользованным положительным целым числом.
задача
Учитывая число n в качестве входных данных, рассчитайте n- й член в этой последовательности.
Это код-гольф, поэтому вы должны стремиться минимизировать размер исходного кода, измеряемый в байтах.
(n,2n)
и каждое число появляется только один раз. Каждая пара выбирается наименьшей из возможных, соблюдая при этом последнее ограничение.Ответы:
Haskell, 40 байт
Нулевой основе.
l
постепенно строит последовательность из ленивого списка оставшихся целых чисел.источник
JavaScript (ES6),
9282696765 байтКак?
Мы отслеживаем:
Внутренне мы используем 0 на основе индекса I . Поэтому нечетное и четное поведение инвертируется:
В нечетных позициях следующее значение просто
2 * b
.В четных позициях мы используем рекурсивную функцию g () и таблицу поиска a, чтобы определить наименьшее значение соответствия:
Чтобы сохранить несколько байтов, я инициализируется
{}
вместо0
. Это заставляет нас использовать:i^n
для сравнения I с п потому , что в({}) ^ n === n
то время как({}) - n
принимает значениеNaN
.-~i
увеличить I , потому что({}) + 1
будет генерировать строку.демонстрация
Показать фрагмент кода
источник
Python 3 ,
807269 байт-7 байт благодаря мистеру Xcoder !
Попробуйте онлайн!
источник
set(...)
с помощью {{* ...} на 78 байт{*...}
вместоset(...)
.{...for...in...}
должно быть больше прощаний.True
для 1)Желе , 15 байт
Попробуйте онлайн!
источник
Математика ,
5653 байта-3 байта спасибо JungHwan Мин !
Попробуйте онлайн!
Основано на выражении Mathematica, приведенном в ссылке OEIS.
источник
Nest[k=0;If[#~FreeQ~++k,#~Join~{k,2k},#]&,{},#][[#]]&
PHP , 64 байта
Попробуйте онлайн!
PHP , 77 байт
Попробуйте онлайн!
PHP , 78 байт
Попробуйте онлайн!
источник
PHP, 56 байт
PHP,
7572 байтаПопробуйте онлайн
источник
05AB1E ,
161514 байтов1-индексироваться.
Используется тот факт, что двоичное представление элементов с нечетными индексами в последовательности заканчивается четным числом нулей: A003159 .
Попробуйте онлайн!
объяснение
источник
Python 2 ,
595149 байтовПопробуйте онлайн!
Задний план
Каждое положительное целое число n может быть однозначно выражено как n = 2 o (n) c (n) , где c (n) нечетно.
Пусть ⟨A п ⟩ п> 0 будет последовательность из провокационной спецификации.
Мы утверждаем, что для всех натуральных чисел n , o (a 2n-1 ) четно. Поскольку o (a 2n ) = o (2a 2n-1 ) = o (a 2n-1 ) + 1 , это эквивалентно утверждению, что o (a 2n ) всегда нечетно.
Предположим, утверждение является ложным, и пусть 2m-1 будет первым нечетным индексом последовательности, так что o (a 2m-1 ) будет нечетным. Обратите внимание, что это делает 2m первым четным индексом последовательности, так что o (a 2m-1 ) является четным.
о (а 2m-1 ) нечетно и 0 четно, так 2m-1 делится на 2 . По определению, 2m-1 представляет собой наименьшее целое положительное число пока не появляется в последовательности , а это означает , что 2m-1 /2 , должно быть , появились раньше. Пусть K быть (первый) индекс в 2m-1 /2 в .
Так как o (a k ) = o (a 2m-1 /2) = o (a 2m-1 ) - 1 является четным, из минимальности n следует, что k нечетно. В свою очередь, это означает , что к + 1 = 2а к = а 2m-1 , что противоречит определению в 2m-1 .
Как это устроено
еще впереди
источник
р ,
706965 байтПопробуйте онлайн!
Анонимная функция, которая принимает один аргумент.
F
по умолчаниюFALSE
или0
так, что алгоритм правильно оценивает, что в последовательности еще нет положительных чисел.Алгоритм генерирует пары в
for
цикле следующим образом (гдеi
идет от2
к2n
до2
):источник
Haskell , 63 байта
Попробуйте онлайн!
Этот злоупотребляет ленивой оценкой Haskell в полной мере.
источник
Perl 6 , 50 байт
Попробуйте онлайн!
1, { ... } ... *
является лениво сгенерированной бесконечной последовательностью, где каждый член после первого предоставляется блоком кода с разделителями-скобками. Поскольку блок ссылается на@_
массив, он получает всю текущую последовательность в этом массиве.@_ % 2
), мы генерируя даже индексированный элемент, так что следующий элемент является двойным последним элементом мы имеем до сих пор:2 * @_[*-1]
.first * ∉ @_, 1..*
.$_
является аргументом для внешней функции. Он индексируется в бесконечной последовательности, давая возвращаемое значение функции.источник
Mathematica, 82 байта
Попробуйте онлайн!
источник
к , 27 байт
1-индексироваться. Попробуйте онлайн!
Использование
(!y)^x
вместо&^x?!y
работает тоже.источник
C # (интерактивный компилятор Visual C #) , 82 байта
Попробуйте онлайн!
-6 байт благодаря @ASCIIOnly!
источник
:
нужны s, так как это будет самое большое число в списке2.0
=>2f
Clojure, 102 байта
Итерирует
n
время для построения последовательности и возвращаетn
1-й элемент, проиндексированный 1.источник
Рубин, 60 байт
0 индексированные. Мы зацикливаем
n/2+1
время, генерируя два значения каждый раз и сохраняя их, заполняя массив по их индексам.v+v*n%2
дает выход, либоv
или вv*2
зависимости от четностиn
.источник
Рубин , 49 байтов
Начните с [0], добавляйте пары в массив, пока у нас не будет хотя бы n + 1 элементов, затем возьмите n + 1-й (основанный на 1)
Попробуйте онлайн!
источник
JavaScript (ES6), 60
65байтИтеративное решение.
Меньше гольфа
Тестовое задание
источник
Желе ,
131210 байтЭто использует наблюдение из моего ответа Python .
Попробуйте онлайн!
Как это устроено
источник