Учитывая N, выведите N-й член этой бесконечной последовательности:
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ... etc.
N может быть 0 или 1 по вашему желанию.
Например, если 0-индексированные затем входы 0
, 1
, 2
, 3
, 4
должны производить соответствующие выходы -1
, 2
, -2
, 1
, -3
.
Если 1-индексированных затем входы 1
, 2
, 3
, 4
, 5
должны производить соответствующие выходы -1
, 2
, -2
, 1
, -3
.
Чтобы было понятно, эта последовательность генерируется путем взятия последовательности натуральных чисел, повторенной дважды
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 ...
и переставить каждую пару нечетных чисел, чтобы окружить четные числа чуть выше
1 2 2 1 3 4 4 3 5 6 6 5 7 8 8 7 9 10 10 9 11 12 12 11 ...
и, наконец, отрицая каждый второй термин, начиная с первого
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ...
Самый короткий код в байтах побеждает.
1,1,2,2,3,3,4,4,...
но здесь это1,2,2,1,3,4,4,3,...
.Ответы:
Python 2 , 23 байта
Нечетные входные данные дают примерно
n/2
, четные примерно-n/2
. Итак, я начал с-n/2+n%2*n
настройки и оттуда.Попробуйте онлайн!
источник
Mathematica, 29 байт
Чистая функция, принимающая вход с 1 индексом. За исключением знаковых переменных
(-1)^#
, последовательность вдвое ближе к входу, разность циклически равна 1, 2, 1, -2. Приятно#~GCD~4
, что наибольший общий делитель входного и4
, 1, 2, 1, 4 циклически; поэтому мы просто вручную заменяем4->-2
и называем это днем. Мне нравится этот подход, потому что он избегает большинства многосимвольных команд Mathematica.источник
Пип ,
2422 байтаПринимает 1-индексированный ввод в качестве аргумента командной строки. Попробуйте онлайн или подтвердите 1-20 .
объяснение
Заметьте, что последовательность может быть получена путем объединения трех других последовательностей, одна с нулевым индексом и другие с одним индексом:
0 0 0 0 2 2 2 2 4 4 4 4
=a//4*2
(0-проиндексировано);1 2 2 1 1 2 2 1 1 2 2 1
=aBA2|1
, гдеBA
это побитовое И, и|
логическое ИЛИ (1-индексированное);-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
=(-1)**a
(1-индексированный).Если мы начнем с
a
1-индексированной части, мы можем сначала вычислить 1-индексированные части (считывая выражение слева направо), а затем уменьшитьa
для 0-индексированной части. Используя встроенную переменнуюv=-1
, мы получаемЧтобы побрить еще два байта, мы должны использовать некоторые приемы манипулирования предшествованием. Мы можем устранить внутренние скобки, заменив
+
в+:
(эквивалент+=
в большом количестве языков). Любой оператор вычисления и назначения имеет очень низкий приоритет, поэтомуaBA2|1+:--a//4*2
эквивалентен(aBA2|1)+:(--a//4*2)
. Pip выдаст предупреждение о назначении чего-то, что не является переменной, но только если у нас включены предупреждения.Единственное , что это более низкий приоритет , чем
:
ISY
, оператор дергать * Он присваивает значение своего операнда к.y
Переменной и передает ее через неизменными; таким образом , мы можем устранить внешние скобки , как хорошо дергать значение , а не его в скобках:YaBA2|1+:--a//4*2
.*
P
rint и utputO
имеют тот же приоритет, что иY
ank, но здесь они бесполезны.источник
Желе ,
87 байтПри этом используется алгоритм из моего ответа на Python , который был значительно улучшен @GB .
Попробуйте онлайн!
Как это работает
источник
¡
)Java 8, 19 байт
Java 7,
4737 байтВпервые Java (8) фактически конкурирует и короче, чем некоторые другие ответы. Тем не менее, не могу превзойти настоящие языки игры в гольф, такие как желе и тому подобное (духух ... какая неожиданность ..>.>; P)
0-индексированный
порт из ответа @Xnor 's Python 2 .
-10 байт благодаря @GB
Попробуй это здесь.
источник
Желе ,
151211 байтПопробуйте онлайн!
Как это работает
источник
RProgN 2 ,
312522 байтаРазъяснения
Попробуйте онлайн!
источник
Рубин,
26 2318 байт0 на основе
-3 байта крадут идею -1 ^ n у Грега Мартина , Денниса и, возможно, кого-то еще, тогда -5 байтов крадут идею n | 2 у xnor .
источник
Stacked ,
3028 байтовПопробуйте онлайн! Возвращает функцию, которая в соответствии с мета-консенсусом. , Принимает ввод с вершины стека.
Используя тот же подход, что и ответ RProgN 2 .
В качестве альтернативы 46 байтов. Попробуйте онлайн! :
Этот генерирует диапазон, затем выбирает и отменяет член соответственно.
источник
Python 2 ,
443327 байтСпасибо @GB за отыгрывание 6 байтов!
Попробуйте онлайн!
источник
05AB1E, 8 байтов
Попробуйте онлайн
объяснение
источник
¹F(
кажется дорогим для "если странно, отрицать".n
, для силы1/n
.Желе ,
98 байтПопробуйте онлайн!
-1 спасибо Денису . Дух плавают преобразования.
Использует подход @ xnor's Python 2.
РЕДАКТИРОВАТЬ : > _>
источник
|2×Ḃ+H~$
сохраняет байт. tio.run/nexus/jelly#AR0A4v//fDLDl@G4gitIfiT/…CJam , 16 байтов
1 на основе ввода.
Попробуйте онлайн!
объяснение
Вот разбивка кода со значениями в стеке для каждого ввода от
1
to4
. Первые несколько команд влияют только на два младших значащих бита,n-1
поэтому после4
этого этот материал просто повторяется циклически, а результаты увеличиваются на 2 из-за деления на два.источник
Perl 6 ,
55 27 2422 байта(Вдохновленный
zipWith
ответом на Haskell )Попробуйте
(Вдохновлено несколькими ответами)
Попробуйте
Попытайся
Попытайся
Expanded:
(Все основаны на 0)
источник
Haskell ,
3736 байтПопробуйте онлайн! Это анонимная функция, которая принимает одно число в
n
качестве аргумента и возвращает 0-индексированныйn
элемент последовательности.источник
Haskell, 56 байт
0 индексированные
источник
Perl 5 47 + 1 (для флага) = 48 байт
Старая подача 82 байта
Беги так:
источник
print +((
и удаляя финал)
. И еще два, используяsay
и-E
. А также еще один, делая($_%4&1||-1)
вместо троичного.JavaScript (ES7), 28 байт
1-индексироваться. Я еще не посмотрел никаких других ответов, поэтому не знаю, является ли это лучшим алгоритмом, но подозреваю, что нет.
источник
JavaScript,
2822 байтаСпасибо @ETHproductions за игру в 6 байтов
Попробуйте онлайн!
источник
f=x=>x%2?~x>>1:x/2+x%4-1
работать?постоянный ток , 98 байт
Черт возьми, это самый длинный ответ, в основном потому, что я прошел путь генерации абсолютного значения каждого элемента последовательности по одному на основе следующей рекурсивной формулы:
затем вывод
(-1)^n * a_n
, а не непосредственное вычислениеn
'-го элемента. В любом случае, это1
индексируется.Попробуйте онлайн!
источник
R, 38 байт
объяснение
источник
TI-Basic (TI-84 Plus CE), 31 байт
TI-Basic - это токенизированный язык, и каждый используемый здесь токен составляет один байт, за исключением
remainder(
двух.Это использует 1-индексированную версию.
Объяснение:
Существует шаблон, который повторяется каждые четыре числа. В версии с 1 индексом это: - (x + 1) / 2, (x + 1) / 2, - (x + 1) / 2, (x-1) / 2 для входного значения x. Это можно представить как кусочно-определенную функцию.
f (x) = - (x + 1) / 2, если x mod 1 mod 4; (x + 1) / 2, если x mod 2 mod 4; - (x + 1) / 2, если x mod 3 mod 4; (x-1) / 2, если x ≡ 0 mod 4
Поскольку части «x 1 mod 4» и «x 3 mod 4» одинаковы, мы можем объединить их в «x 1 mod 2».
Теперь есть кусочная функция:
f (x) = - (x + 1) / 2, если x mod 1 mod 2; (x + 2) / 2, если x mod 2 mod 4; (x-2) / 2, если x ≡ 0 mod 4
Здесь я начинаю разбивать его на настоящие команды. Поскольку значение является положительным для четных индексов и отрицательным для нечетных, мы можем использовать (-1) ^ x. Однако в TI-Basic
i^(2X
(5 байт) короче(-1)^Ans
(6 байт). Обратите внимание, что круглые скобки обязательны из-за порядка операций.Теперь, когда у нас есть способ отменить нечетные входы, мы переходим к модам (добавляя отрицание обратно позже). Я сделал случай нечетного ввода по умолчанию, поэтому мы начнем с
.5(Ans+1)
.Чтобы исправить случай четного ввода, просто добавьте единицу к числу в скобках, но только тогда, когда x mod 0 mod 2. Это может быть представлено как
.5(Ans+1+remainder(Ans+1,2))
или.5(Ans+1+not(remainder(Ans,2)))
, но они имеют одинаковое количество байтов, поэтому не имеет значения, какой именно.Чтобы исправить случай ввода, кратного 4, нам нужно вычесть 3 из числа в скобках, а также еще 1, потому что все кратные 4 являются четными, что добавило бы один из нашего предыдущего шага, так что теперь мы имеем
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))
.Теперь, просто прикоснитесь к определяющей знак части до конца, чтобы получить полную программу.
источник
Befunge 93, 25 байт
Нулевой индексированные
Попробуйте онлайн!
Номер дан
((2(n / 4) + 1) + !!((n % 4) % 3)) * (2(n % 2) - 1)
источник
QBIC , 53 байта
Объяснение:
источник
Мудрый , 19 байт
Попробуйте онлайн!
Это всего лишь порт ответа @Dennis 'Welly на Wise.
источник
Q, 52 байта
0 индексированное решение.
источник