Вызов:
Учитывая положительное целое число n , создайте вектор, который следует этому шаблону:
0 1 0 -1 -2 -1 0 1 2 3 2 1 0 -1 -2 -3 -4 -3 -2 -1 ... ±(n-1) ±n
Или, поясняется словами: вектор начинается с 0
и делает приращения 1
до тех пор, пока не достигнет наименьшего нечетного положительного целого числа, которое не является частью последовательности, затем он будет уменьшаться, пока не достигнет наименьшего (по величине) даже отрицательного целого числа, которое не является не часть последовательности. Это продолжается до тех пор, пока не n
будет достигнуто. Последовательность закончится положительным, n
если n
нечетное, и отрицательным, n
если n
четное.
Выходной формат гибкий.
Тестовые случаи:
n = 1
0 1
-----------
n = 2
0 1 0 -1 -2
-----------
n = 3
0 1 0 -1 -2 -1 0 1 2 3
-----------
n = 4
0 1 0 -1 -2 -1 0 1 2 3 2 1 0 -1 -2 -3 -4
-----------
n = 5
0 1 0 -1 -2 -1 0 1 2 3 2 1 0 -1 -2 -3 -4 -3 -2 -1 0 1 2 3 4 5
Вы можете выбрать n с нулевым индексом. n = 1
тогда бы дал 0 1 0 -1 -2
.
Это код-гольф , поэтому выигрывает самый короткий код на каждом языке! Пояснения приветствуются как всегда!
Ответы:
R ,
5854504843 байта-2 байта благодаря MickyT
Попробуйте онлайн!
источник
Perl 6 ,
6026 байтПопытайся
Попытайся
Expanded:
(-1,-*...*)Z*0..$_
генерирует последовательность0 1 -2 3 -4 5
источник
Python 2 ,
695756 байтПопробуйте онлайн!
Для каждого
n
вверх к (включительно) вычисляются, когда инвертированный является четным числом, имеет кулак два числа (после инверсии) удаляются, а затем добавляются к выходу.input
range(-n,n)
n
источник
05AB1E ,
97 байтСохранено 2 байта благодаря @Emigna
Попробуйте онлайн!
Мой первый ответ 05AB1E (я думаю), поэтому я могу пропустить некоторые трюки ...
объяснение
Я должен поблагодарить @Dennis за оригинальное использование
Ÿ
, иначе,возможно,я бы никогда не узнал об этом ...источник
ÝεDÈi®*}}Ÿ
без проверки,ā®sm
это сумасшедший умный ха-ха.05AB1E ,
1514 байтовПопробуйте онлайн!
объяснение
источник
JavaScript (ES6), 56 байт
Попробуйте онлайн!
комментарии
источник
Haskell , 43 байта
Попробуйте онлайн!
Вычисляет отрицательные кумулятивные суммы списка
[(-1)^k|k<-[1..n],_<-[2..2*k]]
, который является первымиn
строкамиисточник
Желе ,
119 байтПопробуйте онлайн!
Как это работает
источник
Haskell ,
4842 байтаПопробуйте онлайн!
Спасибо Οurous за -1 байт
Несмотря на то, что это вроде очевидно, задним числом, мне потребовалось некоторое время , чтобы прибыть в
(-1)^i*x
который ,x
когдаi
даже и-x
приi
нечетном. Предыдущие итерации, где:источник
1-i
вместо того , чтобы-i+1
в..
выражении.C # (.NET Core) ,
300167 байтЯ никогда не делал ничего из этого раньше, но этот показался забавным. Я понимаю, почему люди используют эти языки «игры в гольф», поскольку 167 кажется намного выше, чем некоторые другие ответы. Но ты должен идти с тем, что ты знаешь.
Попробуйте онлайн!
источник
using
операторы и функцию. Это разрешено по умолчанию, если в запросе не указано, что это должна быть полная программа (даже если это так, вы можете сократить содержащее имя класса).[](){};.
)(n-1)*2
просто2*n-2
и с некоторой перестановкой вы можете удалить там скобки.!=
имеет приоритет меньше, чем%
вы можете удалить пару паренов. И вы можете использовать>0
вместо `! = 0, сохраняет байт.static int[] f(int n)
может статьf=n=>
с помощью (рекурсивный) лямбда, и(n-1)*2
может стать~-n*2
экономить на круглых скобках. Я получил его до 155 (137 + 18) байт: попробуйте онлайн . 18 байтов предназначены дляusing System.Linq;
, потому что требуемый импорт является обязательным для подсчета байтов. Приятного пребывания!J , 25 байт
-5 байт благодаря FrownyFrog!
Попробуйте онлайн!
J , 30 байт
Объяснение:
i.,]
создает список 0..n&.>
для каждого числа в списке выполните глагол в (...) и укажите результат (мне нужен бокс, потому что результаты имеют разную длину)[:( _1&^)
найти -1i
степень (-1 или 1)i:@*
составить список -n..n или n ..- n, в зависимости от знака выше;@
распаковывать>:@*:
найти п ^ 2 + 1}.
и взять столько номеров из спискаПопробуйте онлайн!
источник
n
версия? например*:{.;@([:(i:@*_1&^)&.>i.)
.. спецификация позволяет это$
для отсечки, нет необходимости,&.>
потому что*
это ранг-0.Python 2 ,
6556 байтФормат вывода немного некрасивый. : /
Попробуйте онлайн!
источник
Java 8,
858379 байт-6 байт благодаря @ OlivierGrégoire .
Попробуйте онлайн.
Объяснение:
источник
j
).i
идти вверх, а не вниз, чтобы удалить избыточныйn*n
.R ,
48 4642 байтПопробуйте онлайн!
Порт рубинового ответа Кирилла Л. - и сэкономил 6 байтов благодаря тому же Кириллу Л.! Теперь короче решение Джузеппе ;)
Порт этого октавского ответа Луиса Мендо использует
approx
меньше гольфа.n=n^2+1
можно заменить на,,n^2+1
; или0:n^2+1
(позиционный аргументxout
) для того же количества байтов:R , 56 байт
Попробуйте онлайн!
источник
approx
что здесь будет работать так же, как и решение Luis Mendo для Octave.diffinv
иapprox
из этого вопроса ...~
не работает оператор дополнения :(), вы все равно можете сохранить еще 2 байта , переключившись на полную программу.APL (Dyalog Unicode) , 17 байт
Попробуйте онлайн!
Гольф 2 байта благодаря @FrownyFrog путем преобразования в поезд. Смотрите старый ответ и его объяснение ниже.
APL (Dyalog Unicode) , 19 байт
Попробуйте онлайн!
(Пользы
⎕IO←0
)Мой первый подход состоял в том, чтобы создать несколько диапазонов и объединить их вместе, это легко перевалило за 30 байтов. Затем я начал анализировать последовательность
+\⍣¯1
обозначает обратную кумулятивную суммуСуществует повторяющаяся последовательность 1s и ¯1s, где длина каждой последовательной последовательности 1s или ¯1s равна 1 + 2 × n. И каждая подпоследовательность чередуется от 1 до ¯1. Теперь я могу создать список 1 и 1, а затем сканировать с помощью +
источник
+\0,¯1*⍳(/⍨)1+2×⍳
17 летHaskell , 47 байтов
Попробуйте онлайн!
источник
Ява (JDK 10) , 98 байт
Попробуйте онлайн!
источник
MATL ,
1715 байт-2 байта благодаря Луису Мендо!
Попробуйте онлайн!
Объяснение для
n=3
:источник
Октава ,
444241 байт2 байта удалены благодаря @StewieGriffin , а 1 байт был удален благодаря @Giuseppe!
Попробуйте онлайн!
источник
Рубин ,
5247 байтПопробуйте онлайн!
Ниже оригинальная 52-байтовая версия с объяснением:
Попробуйте онлайн!
Прохождение
источник
map(&:-@)
часть?-r
.Пролог (SWI) , 113 байт
Попробуйте онлайн!
источник
Python 3, 83 байта
источник
Шелуха ,
1817 байтПопробуйте онлайн!
источник
Древесный уголь , 19 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Альтернативное объяснение:
Цикл по целым числам с
0
на вход включительно.Приведите результаты в строку перед печатью.
Отрицание альтернативных наборов результатов.
Сформируйте список из предыдущего индекса в текущий индекс, исключая предыдущий индекс.
источник
Желе ,
1112 байтБа, я думал, у меня было 11 с
_2+ỊrN)N;¥/
Попробуйте онлайн!
Как?
источник
Stax , 10 байт
Запустите и отладьте его
источник
Скала, 119 байт
Ungolfed:
Это, вероятно, может быть намного лучше, но я хотел найти решение, использующее ленивые потоки.
источник
APL (Dyalog Unicode) ,
3432 байтаПопробуйте онлайн!
требует
⎕IO←0
-2 байта благодаря @FrownyFrog
источник
Stacked , 44 байта
Попробуйте онлайн! Прошло много времени с тех пор, как я программировал в Stacked, но я думаю, что все еще получил его.
альтернативы
73 байта:
[0\|>:2%tmo*2 infixes[:...|>\rev...|>rev#,$#'sortby 1#behead]flatmap 0\,]
Это соответствует подходу «диапазоны из сгенерированных индексов», который используется в моем ответе Атташе. Это оказалось довольно долго, так как Stacked не имеет встроенных функций для обратных диапазонов или свертывания. (Вот что
:...|>\rev...|>rev#,$#'sortby 1#behead
делает.)53 байта:
[0\|>:2%tmo _\tpo#,tr[...rep]flatmap 0\,inits$summap]
... поэтому я решил пойти на подход, который вместо этого находит накопленную сумму (
inits$summap
)1
и-1
повторяется нечетными целыми числами, как в R ответа .46 байтов:
[~>0\:2%\#,2*1-tr[...rep]flatmap,inits$summap]
... но я понял, что отрицательные целые и нечетные целые могут быть получены за один раз, умножив оба сгенерированных массива (значения mod 2 диапазона и самого диапазона),
2
затем вычитая1
. Это дает чередование1
и-1
s для первого диапазона и нечетные целые числа для второго!44 байта:
[~>0\:2%\#,2*1-tr[...rep]flatmap,$sumonpref]
... а потом я вспомнил, что у меня есть встроенная функция для отображения префиксов. ^ - ^
источник
Юлия 0.6 , 44 байта
Попробуйте онлайн!
Так как OP упоминает «формат вывода является гибким», это печатает массив подмассивов, например. U (3) =>
[[0, 1], [0, -1, -2, -1], [0, 1, 2, 3]]
.i%2*2-1
решает знак текущего подмассива - отрицательный для четных чисел, положительный для нечетных.[0:i;(n>i)*~-i:-1:1]
находится в двух частях. 0: я прост, диапазон значений от 0 до текущего я. В следующей части ~ -i: -1: 1 - нисходящий диапазон от i-1 до 1. Но мы хотим добавить это, только если мы еще не достигли конечного значения, поэтому умножьте верхний конец диапазона на (n> i), так что когда n == i, диапазон будет 0: -1: 1, что в конечном итоге будет пустым (поэтому массив останавливается на n правильно).И вот версия, которая может поддерживать произвольный доступ - здесь внутренняя лямбда возвращает i-й член последовательности без необходимости сохранять какой-либо из терминов перед ним. Этот вывод также выводит в виде единого аккуратного массива.
4947 байтПопробуйте онлайн!
источник