Половинной экспоненциальная функция является один , который , когда в составе с собой дает экспоненциальную функцию. Например, если f(f(x)) = 2^x
, то f
будет полуэкспоненциальной функцией. В этом задании вы вычислите определенную половину экспоненциальной функции.
В частности, вы будете вычислять функцию от неотрицательных целых чисел до неотрицательных целых чисел со следующими свойствами:
Монотонно возрастающий: если
x < y
, тоf(x) < f(y)
По крайней мере, наполовину: для всех
x
,f(f(x)) >= 2^x
Лексикографически наименьший: среди всех функций с указанными выше свойствами выведите ту, которая минимизирует
f(0)
, которая при этом выборе минимизируетf(1)
, затемf(2)
и так далее.
Начальные значения этой функции для входов 0, 1, 2, ...
:
[1, 2, 3, 4, 8, 9, 10, 11, 16, 32, 64, 128, 129, 130, 131, 132, 256, 257, ...]
Вы можете вывести эту функцию любым из следующих методов, либо в виде функции, либо в виде полной программы:
Принять
x
как вход, выходf(x)
.Взять в
x
качестве входных данных, вывести первыеx
значенияf
.Бесконечно выводим все
f
.
Если вы хотите взять x
и вывести f(x)
, x
должен быть индексирован ноль.
Это код гольфа - выигрывает самый короткий код в байтах. Стандартные лазейки , как всегда, запрещены.
Ответы:
JavaScript (ES7),
5148 байтСохранено 3 байта благодаря @Arnauld
Принимает n и выводит n -й элемент в последовательности.
JavaScript (ES7),
706864 байтаРекурсивная функция, которая принимает
x
и возвращает первыеx
элементы последовательности в виде массива.Как это устроено
Массив a генерируется процедурно, по одному элементу за раз, пока не достигнет желаемой длины. (Порт бесконечной техники, используемой в превосходном ответе Python от xnor, вероятно, будет короче.)
Мы можем сделать следующее наблюдение для каждого индекса i (0-indexed):
Это верно, потому что f (f (j)) должно быть не менее 2 j , а f (f (j)) эквивалентно a [a [j]] , что, в свою очередь, эквивалентно a [i] .
Обычно правильный вариант - ровно 2 j . Однако для особого случая я = 2 , 2 существует в массиве под индексом J = 1 , что означает , что 2 J было бы 2 бут это означает , что мы имели бы 2 на обоих A [1] и в [2] . Чтобы обойти это, мы берем максимум 2 j и a [i-1] + 1 (на один больше, чем в предыдущем пункте), что дает 3 для i = 2 .
Этот метод также помогает решить, существует j или нет - если
.indexOf()
метод JS не существует, возвращается -1 , что приводит к максимальному значению [i-1] + 1 и 2 -1 = 0,5 . Поскольку все элементы в последовательности по крайней мере 1 , это всегда будет возвращать предыдущий элемент плюс один.(Я пишу это объяснение поздно вечером, поэтому, пожалуйста, дайте мне знать, если что-то сбивает с толку, или я что-то пропустил)
источник
272
и up дают неправильные ответы из-за проблем переполнения целых чисел. Это нормально, так как работает до предела типа данных.2**
вместо того, чтобы,1<<
надеюсь, решить проблему..99
убивает решение. Но зачем использовать,+.99
а не только+.9
? Какая разница?Math.log2(...)
и должен был вычислить потолок. Теперь это вообще не нужно. Благодарность! Я посмотрю на2**
вещь - я использовал2**...+.99|0
первоначально, но1<<
был короче, потому что мне не нужно|0
. Теперь я думаю, что нет никакой разницы ...Python 2 , 60 байт
Попробуйте онлайн!
Отпечатки навсегда.
Python , 61 байт
Попробуйте онлайн!
Функция. Выходы
True
на месте1
.источник
Perl 5, 53 + 1 (
-p
) = 54 байтаПопробуйте онлайн
источник
Баш, 66 байт
Попробуйте онлайн
источник
Желе , 14 байт
Попробуйте онлайн!
Как это устроено
источник
Python 2 , 111 байт
Попробуйте онлайн!
Это существенная модификация ответа пользователя 202729 . Я бы опубликовал это улучшение как комментарий, но ответ удален, и поэтому комментарии отключены.
источник
x**2
он слишком мал.x=1000
. Вы можете попробовать2**x
- ужасно большой, но Codegolf - это Codegolf.2**x
создает слишком большой диапазон для продолжения Python.Swift , 137 байт
Принимает ввод как
Int
(целое число) и печатает как[Int]
(целочисленный массив).Неуправляемая версия
источник
?
?