Вот первые 100 чисел простой последовательности:
0,1,0,2,1,4,3,7,6,11,10,16,15,22,21,29,28,37,36,46,45,56,55,67,66,79,78,92,91,106,105,121,120,137,136,154,153,172,171,191,190,211,210,232,231,254,253,277,276,301,300,326,325,352,351,379,378,407,406,436,435,466,465,497,496,529,528,562,561,596,595,631,630,667,666,704,703,742,741,781,780,821,820,862,861,904,903,947,946,991,990,1036,1035,1082,1081,1129,1128,1177,1176,1226
Как работает эта последовательность?
n: 0 1 2 3 4 5 6 7 8 9 10 11 12
0, 1-1=0, 2-1=1, 4-1=3, 7-1=6, 11-1=10, 16-1=15,
0+1=1, 0+2=2, 1+3=4, 3+4=7, 6+5=11, 10+6=16, 15+7=22
a(0) = 0
- Для каждого нечетного
n
(0-индексированного) этоa(n-1) + X
(гдеX=1
и увеличивается на 1 каждый раз, когда к нему обращаются) - Для каждого четного
n
(0-индексированного) этоa(n-1) - 1
Вызов:
Один из:
- Учитывая входное целое число
n
, выведитеn
число в последовательности. - Учитывая введенное целое число
n
, выведите первыеn
числа последовательности. - Вывести последовательность на неопределенный срок, не беря вход ( или принимая пустой неиспользуемый вход ).
Правила соревнований:
- Ввод
n
может быть 0- или 1-индексирован. - Если вы выводите (часть) последовательности, вы можете использовать список / массив, печатать в STDOUT с любым разделителем (пробел, запятая, перевод строки и т. Д.). Ваш звонок.
- Пожалуйста, укажите, какой из трех вариантов вы использовали в своем ответе.
- Вы должны будете поддержать как минимум первые 10000 номеров (10,000-й номер
12,497,501
).
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это возможно.
Тестовые случаи:
Pastebin с первыми 10,001 числами в последовательности. Не стесняйтесь выбирать любой, который вы хотите.
Некоторые более высокие цифры:
n (0-indexed) Output:
68,690 589,772,340
100,000 1,249,975,000
162,207 3,288,888,857
453,271 25,681,824,931
888,888 98,765,012,346
1,000,000 124,999,750,000
ÎGDN+D<
генерирует последовательность, но захват n-го элемента кажется ... сложным в 3 байта.Октава , 32 байта
Попробуйте онлайн!
Выводит n-ное число, индексированное 0. Использует ту же формулу, что и несколько других ответов.
источник
APL (Dyalog Unicode) ,
1612 байтов SBCSФункция анонимного молчаливого префикса. 0 индексированные.
Попробуйте онлайн!
+/
сумма⊢↑
первыеn
элементы∘∊
из й nlisted (уплощенные)¯1,¨⍨
отрицательные один прилагаются к каждому⍳
первыеn
разы (от 0 доn
–1источник
Желе , 6 байт
Принимается монадическая ссылка (1-indexed),
n
которая возвращаетa(n)
.Попробуйте онлайн! Или посмотрите набор тестов
Как?
источник
PHP ,
7364555147 байтПервый способ
Первый код ответа в гольф!
Я уверен, что есть PHP-трюки, чтобы сделать его короче, и математика, вероятно, может быть улучшена.
Принимает n в качестве первого аргумента и выводит n-е число в последовательности.
Минус 9 байтов путем удаления "$ x = 0;" и "$ i = 0".
Минус 9 байтов благодаря @Kevin Cruijssen, улучшающему цикл for и потерю конечного тега.
Минус 1 байт с использованием побитового или "|" а не "(int)"
Минус 3 байта благодаря @Dennis, поскольку вы можете удалить теги, запустив их из командной строки с помощью "php -r 'code here'"
Попробуйте онлайн!
Второй метод
Сопоставил мой предыдущий ответ с совершенно новым методом!
Использование XOR и оператора tenary для переключения между суммами в цикле.
Изменить: это не работает для п = 0, и я понятия не имею, почему. $ i не назначен, поэтому он должен быть 0, поэтому цикл
($i<$argv[1])
должен завершиться с ошибкой(0<0==false)
, поэтому неназначенный $ x должен вывести как 0, а не 1.Попробуйте онлайн!
Третий метод
Преобразование формулы Excel @Wernisch, созданной в PHP, дает 47-байтовое решение.
Попробуйте онлайн!
источник
?>
. Удаление$x=0
и$i=0
действительно разрешено (если нет,$x=$i=0
то было бы и короче). Кроме того, цикл может быть сокращен доfor(;$i<$y+1;)$x+=$i++;
. А это всего -15 байт. Приятного пребывания! :)R 35 байт
Попробуйте онлайн!
Я подумал, что это интересная альтернатива ответу @ JayCe, так как он не очень хорошо переносится на языки без встроенной поддержки матриц и оказывается просто гольфом.
1-индексированный, возвращает первые
n
элементы последовательности.Как это работает:
rbind(n<-1:scan(),-1)
строит следующую матрицу:Поскольку R содержит матрицы в мажорном столбце, если бы мы преобразовали это в a
vector
, мы получили бы векторкоторый, если мы возьмем совокупную сумму, мы получим
которая является последовательностью, просто без ведущих
0
.diffinv
к счастью, добавляет ведущий ноль, поэтому мы берем первыеn-1
значения из матрицы иdiffinv
их, получая первыеn
значения последовательности.источник
diffinv
мне!R ,
3534 байтаПопробуйте онлайн!
Первый вариант вывода. Та же формула, что и во многих других ответах (я бы хотел указать на первый ответ, предоставив формулу, я не могу понять, какая это).
Второй и третий варианты вывода ниже:
R , 43 байта
Попробуйте онлайн!
R , 51 байт
Попробуйте онлайн!
источник
Matlab / Octave,
3126 байт5 байтов сэкономили Луису Мендо!
источник
fix
вместоfloor
, аn/2+.5
вместоceil(n/2)
fix()
и не ожидал1:n/2+.5
работать - так много вещей, которые могут пойти не так, но на самом деле они этого не делают :)Java (JDK 10) , 20 байт
Попробуйте онлайн!
Port of TFeld's Python 2 anwser , так что давай им голос! ;)
источник
QBasic 1.1 , 49 байтов
1-индексироваться.
источник
QBasic 1.1 , 30 байт
Использует алгоритм TFeld. 0 индексированные.
источник
QBasic, 31 байт
Решение «просто реализуй спецификацию» длится немного дольше, чем решение Эрика .
Это выводит на неопределенный срок. В целях его запуска я рекомендую изменить последнюю строку на что-то вроде
LOOP WHILE INPUT$(1) <> "q"
, что будет ждать нажатия клавиши после каждого второго ввода последовательности и завершаться, если нажата клавишаq
.источник
C # (.NET Core) , 56 байт
-2 байта благодаря Кевину Круйссену
Попробуйте онлайн!
1 проиндексировано. Возвращает
a(n)
Ungolf'd:
источник
i=1;for(;i<n;i++)
может бытьi=0;for(;++i<n;)
иi%2==0
может бытьi%2<1
.do-while
проверит после завершения первой итерации. :)if
сfor
-loop. Например:if(t>0)for(i=0;i<l;i++)
кfor(i=0;t>0&i<l;i++)
. Хотя я почти никогда не мог использовать это в своих ответах.Шелуха ,
1198 байтСохраненный байт благодаря H.PWiz.
Выходы в виде бесконечного списка.
Попробуйте онлайн!
объяснение
источник
Додос , 69 байт
Попробуйте онлайн!
Почему-то это самый длинный ответ.
Объяснение.
источник
Древесный уголь , 15 байт
Попробуйте онлайн! 0 индексированные. Ссылка на подробную версию кода. Формула, вероятно, будет короче, но что в этом хорошего? Объяснение:
источник
JavaScript,
494845 байтПопробуйте онлайн!
Не так красиво, как ответ @tsh, но мой работает для больших чисел.
А теперь спасибо @tsh, за
eval
решение!источник
<=x+1
может быть<x+2
x=>eval('for(i=0,r=1;++i<x+2;)r+=i%2?-1:i/2')
должно быть короче.eval
Возвращает ли последнее измененное значение? Я до сих пор не до конца понимаю, на что он способен.do
заявлении в более поздней версии).Befunge 93, 26 байт
Запускается бесконечно.
Попробуйте онлайн , хотя вывод становится немного шатким и возвращается после x = 256, предположительно, TIO не может обрабатывать символы выше U + 256. Прекрасно работает на https://www.bedroomlan.org/tools/befunge-playground (к сожалению, только в Chrome. С Firefox по какой-то причине конечные линии удаляются во время выполнения ...)
источник
J , 17 байт
Порт решения Адама APL.
Попробуйте онлайн!
источник
Pyth , 8 байт
Возвращает
n
число в последовательности с 0 индексами. Попробуйте онлайнПояснение, с примером для
n=5
:источник
Perl 6 ,
3826 байтПопытайся
Основано на обратной инженерии TFeld's Python answer .
Попытайся
расширенный
38 байт (генератор последовательности):
Обратите внимание, что это дает преимущество, которое вы можете передать,
*
чтобы получить всю последовательность, или передать Range для более эффективной генерации нескольких значений.26 байт (прямой расчет):
источник
05AB1E , 8 байтов
Попробуйте онлайн!
Основанный на желеобразном подходе Джонатана Аллана (который, вероятно, был основан на OP, редактирующем вопрос с другим определением последовательности), так что 1-индексируется.
источник
I
вместо¹
), но общий подход и количество байтов точно такие же:;<LO>IÉ-
Выпуклый ,
109 байтПопробуйте онлайн!
Основано на подходе Джонатана Аллана Jelly (который, вероятно, был основан на OP, редактирующем вопрос с другим определением последовательности). 1-индексироваться.
Объяснение:
источник
Желе , 6 байт
Верните первые
n
цифры.Попробуйте онлайн!
источник