Вступление
Признак ряда является либо +
, или -
для каждого ненулевого целого числа. Ноль сам по себе без знака (так +0
же, как -0
). В следующей последовательности мы будем чередовать положительный знак , ноль и отрицательный знак . Последовательность начинается с 1
, поэтому мы пишем 1
с положительным знаком, с нуля (это странно, но мы просто умножаем число на 0) и отрицательным знаком:
1, 0, -1
Следующий номер 2
, и мы снова делаем то же самое:
2, 0, -2
Последовательность в конечном итоге такова:
1, 0, -1, 2, 0, -2, 3, 0, -3, 4, 0, -4, 5, 0, -5, 6, 0, -6, 7, 0, -7, ...
Или более читаемая форма:
a(0) = 1
a(1) = 0
a(2) = -1
a(3) = 2
a(4) = 0
a(5) = -2
a(6) = 3
a(7) = 0
a(8) = -3
a(9) = 4
...
Задание
Если задано неотрицательное целое число n , выведите n- й член вышеуказанной последовательности. Вы можете выбрать, будете ли вы использовать индексированные нулями или одноиндексированные версию .
Тестовые случаи:
Zero-индексируются:
a(0) = 1
a(11) = -4
a(76) = 0
a(134) = -45
a(296) = -99
Или, если вы предпочитаете одноиндексный:
a(1) = 1
a(12) = -4
a(77) = 0
a(135) = -45
a(297) = -99
Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
[0, 0, 0, -1, 0, 1...
1
.Ответы:
Желе, 7 байт
Zero-индексироваться. Тестовые случаи здесь.
Объяснение:
источник
JavaScript ES6, 18 байт
Получилось очень похоже на ответ @ LeakyNun, но я его не видел, пока не опубликовал свой.
Объяснение и Унгольфед
-~
является сокращениемMath.ceil
или округлением:Показать фрагмент кода
источник
Math.ceil
и-~
разные;Math.ceil(1) == 1
тогда как-~1 == 2
n=>~(n/3)*~-(n%3)
MarioLANG,
9381 байтодин индексированные
Попробуйте онлайн
Пояснение:
мы начнем с принятия импульса
который дает нам
затем мы уменьшаем левый байт и увеличиваем правый байт с помощью
мы заканчиваем с
Затем мы создали цикл
цикл будет идти, пока память не будет выглядеть
тогда нам нужно только вывести результат
источник
;(
и>:(
. Хотя два раза[<:
можно было бы считать слегка счастливыми. ; PPython 2, 24 байта
Полная программа:
источник
MATL,
1512 байтЭто использует одну основанную индексацию.
Попробуйте онлайн! или проверить контрольные примеры
Объяснение:
источник
Q3/Xk-1:1G_)*
может работать лучше. Вероятно, вместо этого он может быть изменен для индексации на основе 1.Haskell, 27 байт
Чуть более интересное 28-байтовое решение:
(Оба
0
индексируются)источник
MATL , 8 байт
Результат основан на 1.
Попробуйте онлайн!
объяснение
Это строит массив 2D
а затем использует линейное индексирование, чтобы извлечь нужный термин. Линейная индексация означает индекс вниз, затем через (так что в приведенном выше массиве первые записи в линейном порядке являются
1
,0
,-1
,2
,0
, ...)источник
Perl 5, 22 байта
21 плюс один для
-p
:Использует индексирование на основе 1.
Объяснение:
-p
устанавливает переменную,$_
равную вводу. Затем код устанавливает его равным$_%3
элементу th, разделенному на 3, из списка на основе 0(-$_,$_+2)
(где%
по модулю). Обратите внимание, что если$_%3
равно два, то такого элемента нет, и последующее деление на 3 нумерует неопределенное значение до 0.-p
Затем печатается$_
.источник
Баш,
2825 байтисточник
Perl 6 ,
2623 байта(Короче был переведен из других ответов)
Пояснение (первого):
Тестовое задание:
источник
J,
1915 байтНаверное, нужно играть в гольф дальше ...
1-индексироваться.
Ungolfed:
Где
>>
означает ввод (STDIN) и<<
означает вывод (STDOUT).источник
Пайк,
87 байт (старая версия)Попробуй это здесь! - Обратите внимание, что ссылка, вероятно, не будет длиться долго
Новейшая версия
Попробуй это здесь!
источник
J, 27 байт
Хотя это и не самое лучшее в гольфе, мне это нравится больше, так как оно использует повестку дня.
Вот разложение этого дерева:
Это очень похоже на J-ответ Кенни в том смысле, что он выбирает величину и знак, но отличается тем, что я использую повестку дня для выбора знака.
источник
MATL, 8 байт
Это решение использует основанную на 1 индексацию в последовательности.
Попробуйте онлайн
Модифицированная версия, показывающая все тесты
объяснение
источник
Pyth, 10 байт
Попробуйте онлайн!
Объяснение:
Примечание: я принял последовательность с нулевым индексом.
источник
*@(1ZtZ)%Q3h/Q3
(1ZtZ)
=-L1 2
На самом деле, 10 байтов
Попробуйте онлайн!
Объяснение:
источник
05AB1E, 7 байтов
Код:
Разъяснение:
источник
GeoGebra, 44 байта
где
n
одноиндексное.Объяснение:
Нет необходимости генерировать все триплеты до конца
{n, 0, -n}
, но это короче, чем записьceil(n/3)
или что-то в этом роде. Обратите внимание, что онn
должен быть определен для создания этого объекта (если он не был определен во время его запуска, GeoGebra предложит вам создать слайдерn
).источник
n
, введите что-то вродеn=297
(это даст вам слайдер, который настроен хорошо). Затем вставьте формулу в поле ввода, которое теперь должно быть нижеn
. (Удостоверьтесь, что нажали return;) Формула должна соответствовать томуn
члену последовательности, и она должна измениться при перемещении ползунка.Лабиринт ,
171514 байтовСохранено 3 байта, используя идею Сок
1-(n%3)
вместо использования~(n%3-2)
.Программа завершается с ошибкой (деление на ноль), но сообщение об ошибке отправляется в STDERR.
Попробуйте онлайн!
объяснение
Программа полностью линейна, хотя в конце код выполняется наоборот.
Указатель инструкции теперь попадает в тупик и оборачивается, поэтому он начинает выполнять код с конца:
источник
Эрланг, 40 байт
К сожалению, у Эрланга нет оператора «%» по модулю, а «rem» требует пробелов, даже до 3.
источник
Гексагония , 25 байтов
Или в не минимизированном формате:
Попробуйте онлайн!
Мой первый набег на Гексагонию, так что я уверен, что я не сделал это нигде настолько эффективно, как это могло бы быть сделано ...
Вычисляет
-(n%3 - 1)
на одном ребре памяти,n/3 + 1
на соседнем, а затем умножает их вместе.источник
R, 28 байт
Похоже, это вариация большинства ответов здесь. Ноль на основе.
Приятно то, что он обрабатывает несколько входов
Первоначально я хотел сделать следующее, но не мог обрезать лишние байты.
Используется
rbind
для добавления нулей и отрицательных значений в диапазон от 1 доn
возвратаn
первого числа (на основе одного).источник
Пакет (Windows), 86 байт
Alternate.bat
Эта программа работает как
Alternate.bat n
гдеn
номер , который вы хотите вызвать функцию на.источник
APL, 12 символов
0 3⊤
это APLdivmod 3
.источник
Ява 7,
383736 байтМой первый гольф, будь нежным
Попробуй это здесь!(тестовые случаи включены)
Редактировать: я не учел, а также ударил еще одного персонажа, заменив
(-i%3+1)
на(1-i%3)
.источник
return
и использовать лямбду Java 8.Сетчатка, 45 байт
Попробуйте онлайн!
Тестирование.
Принимает ввод / вывод в base-ten. 1-индексироваться.
Унарный ввод, вывод базы-десять, 1-индексированный: 40 байтов
Попробуйте онлайн!
Тестирование.
источник
MATLAB / Octave, 27 байт
Это создает анонимную функцию, которая может быть вызвана с помощью
ans(n)
. В этом решении используется индексирование на основе 1.Все тесты
источник
Mathematica 26 байтов
С 4 байтами сохранено благодаря Мартину Эндеру.
Использует тот же подход, что и Suever.
источник
Октава, 23 байта
Без модов минусов ...
Использует основанную на 1 магии индексации.
объяснение
Создает анонимную функцию, которая будет:
После шага умножения у нас будет матрица 3xn, например, так (для n = 12):
Создание
n
столбцов - это излишне, но это удобное число, которое гарантированно будет достаточно большим. Линейное индексирование отсчитывает каждый столбец слева направо, поэтому элемент с линейным индексом4
будет2
.Все тестовые случаи на ideone .
источник
постоянный ток, 10
Использует индексирование на основе 1.
источник