Последовательность жонглера описана следующим образом. Начиная со ввода a 1 , следующий член определяется рекуррентным соотношением
Последовательность заканчивается, когда она достигает 1, так как все последующие члены будут равны 1.
задача
Если вход n
больше или равен 2, напишите программу / функцию / генератор / и т. Д. который выводит / возвращает соответствующую последовательность жонглера. Вывод может быть в любой разумной форме. Вы не можете использовать встроенную функцию, которая вычисляет последовательность juggler, или любую встроенную функцию, которая непосредственно дает результат. Вы можете предположить, что последовательность заканчивается в 1
.
Тестовые случаи
Input: output
2: 2, 1
3: 3, 5, 11, 36, 6, 2, 1
4: 4, 2, 1
5: 5, 11, 36, 6, 2, 1
Это код гольф. Самый короткий код в байтах побеждает.
~5.6*10^7
значений (пока они все останавливаются).Ответы:
Желе ,
121110 байтСпасибо @ Sp3000 за вывод 1 байта!
Попробуйте онлайн!
Как это устроено
источник
<code> </code>
вместо обратных галочек, похоже, отображается фактический символ SP. Спасибо что подметил это.Юлия,
645048423230 байтЭто рекурсивная функция, которая принимает целое число и возвращает массив с плавающей точкой.
Мы строим массив, объединяя входные данные со следующим членом последовательности, вычисляемым как х в степени его четности плюс 1/2. Это дает нам либо x 1/2, либо x 1 + 1/2 = x 3/2 . Целочисленное деление на 1 получает слово. Когда условие x <3 истинно, последний элемент будет логическим, а не числовым значением, но поскольку массив не является типом
Any
, он приводится к тому же типу, что и остальная часть массива.Благодаря Деннису сэкономлено 14 байт!
источник
JavaScript (ES7),
4533 байтаобъяснение
Рекурсивный подход. Возвращает разделенную запятыми строку чисел.
Тестовое задание
**
не используется в тесте на совместимость браузера.Показать фрагмент кода
источник
**
было поддержано во всех браузерах.**
было поддержано в C #.Mathematica,
4039 байтСпасибо Мартину Бюттнеру за сохранение 1 байта.
Прецедент
источник
Pyth,
1412 байтдемонстрация
Мы начнем с кумулятивного уменьшения,
.u
которое в этом случае начинается с входа и применяет функцию до тех пор, пока результат не повторяется, после чего он выводит все промежуточные результаты.Функция принимает предыдущее значение как
N
. Это начинается с принятия его квадратного корня с@N2
. Затем он раздваивает это значение при умножении наN
с*B ... N
. Это создает список[N ** .5, (N ** .5) * N]
, незатронутые результаты для четных и нечетных случаев. Затем соответствующий незатронутый результат выбирается путем индексации в списке с помощью@ ... N
. Так как Pyth имеет модульную индексацию, не выдается никаких ошибок. Наконец, результат обреченs
.источник
MATL,
1312 байтПопробуйте онлайн!
объяснение
Спасибо Луису за сохранение байта!
источник
floor
Функция была измененаk
, так что вы можете использовать , что вместо того ,Zo
чтобы сохранить 1 байт. (Извините за эти изменения; вы можете ознакомиться с краткой информацией о выпуске здесь )Минколанг 0,15 , 25 байт
Попробуй это здесь!
объяснение
источник
TSQL, 89 байт
Вход идет в
@N
:Код:
источник
APL,
282416 байтЭто программа, которая принимает целое число и печатает последовательные выходные данные в отдельных строках.
Объяснение:
Попробуйте онлайн
Благодаря Денису сэкономлено 8 байт!
источник
Java 7,
8371 байтПервоначально я использовал типичный
for
цикл, но мне пришлось прыгать через обручи, чтобы заставить его работать правильно. Послекражиидеи заимствования user81655 вместо того, чтобы использовать ее, я опустил ее на двенадцать байтов.источник
Haskell, 70 байт
Haskell не имеет
sqrt
встроенного целого числа , но я думаю, что может быть что-то короче, чемfloor.sqrt.fromInteger
.источник
Oracle SQL 11.2, 128 байт
Un-golfed
Добавление MOD (i, 2) к .5 короче, но есть ошибка с POWER (2, .5):
дает
источник
R,
5451 байтСохранено 3 байта благодаря планнапу.
источник
floor(n^(.5+n%%2))
доn^(.5+n%%2)%/%1
я думаю. +1 Тем не менее.CJam, 18 байт
Проверьте это здесь
Похоже на ответ Дэвида в MATL .
источник
Python 3,
57,45,43, 41 байтЛучшее решение с предложением от @mathmandan
Этот метод будет печатать каждое число на новой строке
Предыдущее решение: сократить до 43 байт после рекомендации xnor
Вы можете позвонить выше, выполнив
a(10)
возврат[10, 3.0, 5.0, 11.0, 36.0, 6.0, 2.0, 1.0]
Выше будет выводить значения в виде чисел с плавающей точкой. Если вы хотите, чтобы они были целыми числами, тогда мы можем просто добавить дополнительные 2 байта для 43 байтов:
источник
[n][:n<2]or
, или как1/n*[n]or
для целочисленного случая.def j(n):print n;n-1and j(n**(.5+n%2)//1)
. (Или в Python 3,def j(n):print(n);n-1and j(n**(.5+n%2)//1)
это 42 байта.) Он будет печатать термин последовательности по термину вместо сбора терминов в списке.n<2or
а неn-1and
TI-Basic, 30 байт
источник
Repeat Ans=1
сWhile log(Ans
, и использование√(Ans)Ans^remainder(Ans,2
.JavaScript ES6,
109102 байтаЯ знаю, что это можно сыграть в гольф. Возвращает строку чисел, разделенных запятыми.
источник
C ++, 122 байта
источник
C #, 62 байта
Вдохновленный @ user81655 и @Alex A., я использовал рекурсию.
источник
Сетчатка, 144 байта
Вход и выход в унарном виде.
От 2-й до последней строки содержится пробел, а две средние строки и последняя строка пусты.
Попробуйте онлайн
объяснение
Целочисленный квадратный корень в сетчатке от Digital Trauma
источник
C
646361 байтисточник
n%2?1.5:0.5
наn%2+0.5
или.5+n%2
(если это позволяет C). Еслиn%2
это правда,n%2
равен 1, иначе 0.TI BASIC, 43 байта
Я вытаскиваю Томаса Ква и отвечаю на этот вопрос на свой мобильный.
Замените
sqrt
реальным символом на вашем калькуляторе. Отображает разделенный строкой список номеров, который является приемлемым форматом.источник
JavaScript ES6, 76 байт
Является ли генератор по имени
j
. Чтобы использовать, установитеa = j(<your value>);
. Чтобы увидеть следующее значение в последовательности, введитеa.next().value
.Ungolfed:
источник
F # 77 байт
Не заканчивается в 1, но продолжает идти.
Использование:
Версия, которая фактически заканчивается на 1, 100 байтов
Ungolfed
источник
Perl 5, 34 байта
33, плюс 1
-pE
вместо-e
объяснение
Во-первых,
-p
устанавливает переменную,$_
равную вводу из стандартного ввода. Затем мы запускаем блок кода:Наконец,
-p
печатает$_
.Равной длины
Также использует
-p
.Это: печатает
$_
; назначает, как указано выше; проверяет, равно ли 0 возвращаемое значениеsay
(которое равно 1), за вычетом нового значения$_
, и восстанавливает блок, если это так; затем печатает$_
в конце.источник
Округ Колумбия,
2221 байтРазъяснение:
Есть ошибка: когда вход есть
1
, выход состоит из двух1
s.источник