Последовательность Сильвестра, OEIS A000058 , является целочисленной последовательностью, определенной следующим образом:
Каждый участник является продуктом всех предыдущих участников плюс один. Первый член последовательности - 2.
задача
Создайте наименьшую возможную программу, которая берет n и вычисляет n-й член последовательности Сильвестра. Стандартный ввод, вывод и лазейки применяются. Так как результат растет очень быстро, вы не должны принимать какой-либо термин, из-за которого результат может вызвать переполнение в выбранном вами языке.
Тестовые случаи
Вы можете использовать либо ноль, либо одно индексирование. (Здесь я использую нулевую индексацию)
>>0
2
>>1
3
>>2
7
>>3
43
>>4
1807
n
возвращаетnth
номер принятой последовательности?Ответы:
Brain-Flak ,
7668585246 байтПопробуйте онлайн!
Использует эти отношения вместо:
который получен из этого отношения, модифицированного из того, что предусмотрено в последовательности:
a(n+1) = a(n) * (a(n) - 1) + 1
,объяснение
Для получения документации о том, что делает каждая команда, пожалуйста, посетите страницу GitHub .
В Brain-Flak есть два стека, которые я назову Stack 1 и Stack 2 соответственно.
Ввод сохраняется в стеке 1.
Для алгоритма генерации:
Альтернативная 46-байтовая версия
Это использует только один стек.
Попробуйте онлайн!
источник
Желе , 5 байт
При этом используется индексирование на основе 0 и определение из спецификации вызова.
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Гексагония , 27 байт
Развернутая:
Попробуйте онлайн!
объяснение
Давайте рассмотрим последовательность
b(a) = a(n) - 1
и сделаем небольшую перестановку:Эта последовательность очень похожа, но мы можем отложить приращение до самого конца, что позволяет сохранить байт в этой программе.
Итак, вот аннотированный исходный код:
Создано с помощью HexagonyColorer Тимви .
А вот диаграмма памяти (красный треугольник показывает начальное положение и ориентацию указателя памяти):
Создано с помощью Эзотерики Тимви .
Код начинается с серого пути, который оборачивает левый угол, поэтому начальный линейный бит следующий:
Затем код попадает в
<
ветвь и указывает начало (и конец) основного цикла. Пока N- ребро имеет положительное значение, будет выполнен зеленый путь. Этот путь несколько раз обходит сетку, но на самом деле он полностью линейный:.
Нет-OPS, поэтому фактический код:Как только это уменьшение уменьшается
N
до0
, выполняется красный путь:источник
J,
181412 байтЭта версия благодаря рандоме. Я постараюсь написать подробное объяснение позже.
J, 14 байт
Эта версия благодаря миль. Использовал наречие власти
^:
вместо повестки дня, как показано ниже. Больше объяснений, чтобы прийти.J, 18 байт
0 индексированные.
Примеры
объяснение
Это повестка дня, которая выглядит следующим образом:
(Генерируется с использованием
(9!:7)'┌┬┐├┼┤└┴┘│─'
затем5!:4<'e'
)Разбивая:
Используя верхнюю ветвь как герунду
G
, а нижнюю как селекторF
, это:Это использует функцию постоянной ,
2:
когда0 = * n
, то есть, когда знак равен нулю ( при этомn
равна нулю). В противном случае мы используем эту вилку:Который один плюс следующие серии поверх:
Далее разлагается, это product (
*/
) over self-reference ($:
) over range (i.
).источник
2(]*:-<:)^:[~]
14 байтов, используя формулуa(0) = 2
иa(n+1) = a(n)^2 - (a(n) - 1)
. Чтобы вычислить большие значения,2
в начале должно быть отмечено как расширенное целое число.v`$:@.u
рекурсивном формате. Я всегда использовал^:v
формат, который часто является более сложным. @ Мили Я тоже никогда не использовал(]v)
трюк. Мне понадобилось 5 минут, чтобы понять это.2(]*:-<:)~&0~]
(или2:0&(]*:-<:)~]
). И объединяя их 13 байтов]0&(]*:-<:)2:
.0&(]*:-<:)2:
. (Извините, я не долженPerl 6 , 24 байта
объяснение
Использование:
источник
$_
? Что это за колдовство?Haskell, 26 байтов
Пример использования:
f 4
->1807
.источник
Java 7,
4642 байтаИспользуется 0-индексация по обычной формуле. Я сменил
n*n-n
наn*(n-1)
хотя, так как Java не имеет под рукой оператора питания, иf()
звонки становились долго.источник
f(n)*~-f(n)
должно сработать.return--n<0
сохраняет еще один байт.Haskell, 25 байт
источник
СИЛОС , 60 байт
Попробуйте онлайн!
Порт моего ответа в т .
источник
Brain-Flak ,
158154 байтаЛики Монахиня побила меня здесь
Попробуйте онлайн!
объяснение
Положите два под входом а (0)
В то время как вход больше нуля, вычтите единицу из входа и ...
Молча ...
Поместите один на другой стек, чтобы действовать как катализатор для умножения <> (()) <>
Пока стек не пустой
Переместить верхнюю часть списка и скопировать
Умножьте катализатор на копию
Добавить один
Переместите последовательность обратно в правильный стек
Удалить все, кроме нижнего элемента (т. Е. Последний созданный номер)
источник
C, 32 байта
Использует индексирование на основе 1. Проверьте это на Ideone .
источник
На самом деле , 9 байтов
Попробуйте онлайн!
Использует эти отношения вместо:
который получен из этого отношения, модифицированного из того, что предусмотрено в последовательности:
a(n+1) = a(n) * (a(n) - 1) + 1
,источник
R,
44 4241 байт2 байта экономят благодаря JDL
1 байт благодаря пользователю user5957401
источник
n
гарантированно не будет отрицательным, то условие может быть уменьшено сn>0
простогоn
.f(n-1)
составляет 6 байтов. Я думаю, что вы сохраняете байт, назначая его чему-то. т.е.ifelse(n,(a=f(n-1))^2-a+1,2)
Оазис , 4 байта (неконкурирующий)
Вероятно, мой последний язык из семьи гольфистов! Не конкурирует, так как язык задним числом.
Код:
Альтернативное решение благодаря Zwei :
Расширенная версия:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
b<*>2
помощьюa(n-1)*(a(n-1)+1)-1
b
так как это будет автоматически заполнено (а не ввод) :).Python,
3836 байт2 байта благодаря Денису.
Идео это!
Вместо этого использует это отношение, измененное из приведенного в последовательности:
a(n+1) = a(n) * (a(n) - 1) + 1
объяснение
0**n*2
возвращается,2
когдаn=0
и0
противном случае, потому что0**0
определено1
в Python.источник
чеддер , 26 байт
Попробуйте онлайн!
Довольно идиоматично.
объяснение
источник
CJam, 10 байтов
Использует индексирование на основе 0. Попробуйте онлайн!
источник
05AB1E , 7 байтов
Разъяснения
Используется индексирование с нуля.
Попробуйте онлайн!
источник
Пролог, 49 байт
источник
СИЛОС 201 байт
Не стесняйтесь попробовать это онлайн!
источник
Желе , 7 байт
Попробуйте онлайн!
Использует это соотношение, представленное в последовательности вместо:
a(n+1) = a(n)^2 - a(n) + 1
объяснение
источник
C, 46 байтов
Идео это!
Используется
p
как временное хранение продукта.В основном я определил две последовательности
p(n)
иr(n)
, гдеr(n)=p(n-1)+1
иp(n)=p(n-1)*r(n)
.r(n)
это обязательная последовательностьисточник
R,
50 4644 байтовВместо того, чтобы отслеживать всю последовательность, мы просто отслеживаем продукт, который следует данному правилу квадратичного обновления, пока
n> 1n> 0. (Эта последовательность использует соглашение «начать содногонуля»)Использование соглашения о начале с нуля экономит пару байтов, поскольку мы можем использовать if (n) вместо if (n> 1)
источник
Медуза , 13 байт
Попробуйте онлайн!
объяснение
Давайте начнем снизу вверх:
Это хук, который определяет функцию
f(x) = (x-1)*x
.Это составляет предыдущий хук с функцией приращения, поэтому он дает нам функцию
g(x) = (x-1)*x+1
.Наконец, это генерирует функцию,
h
которая является итерацией предыдущей функцииg
, столько раз, сколько задано целочисленным вводом.И наконец, мы применяем эту итерацию к начальному значению
2
.p
Наверху просто печатает результат.Альтернатива (также 13 байт)
Это откладывает приращение до самого конца.
источник
С,
43,34, 33 байта1-индексированный:
Основной тест:
источник
Брахилог , 13 байт
Попробуйте онлайн!
Использует эти отношения вместо:
который получен из этого отношения, модифицированного из того, что предусмотрено в последовательности:
a(n+1) = a(n) * (a(n) - 1) + 1
,источник
Mathematica, 19 байт
Или 21 байт:
источник
Array
Решение является магическим. Жаль,##0
это не вещь. ;)Лабиринт , 18 байт
Кредиты для Sp3000, которые нашли то же решение самостоятельно.
Попробуйте онлайн!
источник
На самом деле ,
1412 байтПри этом использовалась 0-индексация. Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing:
источник
GolfScript ,
1210 байт2 байта благодаря Денису.
Попробуйте онлайн!
Использует
a(n) = a(n-1) * (a(n-1)-1) + 1
.источник
(
сокращение от1-
;)
это сокращение от1+
.