Неотрицательные целые числа устали от того, что у них всегда одни и те же два соседа, поэтому они решают немного перемешать. Тем не менее, они также ленивы и хотят оставаться как можно ближе к своей исходной позиции.
Они придумали следующий алгоритм:
- Первый элемент 0.
- Элемент является наименьшим числом, которого еще нет в последовательности, и который не является соседом элемента.
Это создает следующую бесконечную последовательность:
0,2,4,1,3,5,7,9,6,8,10,12,14,11,13,15,17,19,16,18,20,22,24,21,23,25,27,29,26,28 ...
0
это первый элемент. 1
наименьшее число еще не в последовательности, но это сосед 0
. Следующее наименьшее число - 2
это второй элемент последовательности. Теперь остальные цифры 1,3,4,5,6,...
, но и как 1
и 3
являются соседями 2
, 4
является третьим членом последовательности. Поскольку 1
он не является соседом 4
, он, наконец, может занять свое место в качестве четвертого элемента.
Задание
Напишите функцию или программу как можно меньше байтов, которая генерирует вышеупомянутую последовательность.
Вы можете
- выводить последовательность бесконечно,
- взять вход и вернуть элемент последовательности, или
- возьмите вход и верните первые элементов последовательности.
И индексирование с нуля или с одной индексацией подойдет, если вы выберете один из двух последних вариантов.
Вам не нужно следовать приведенному выше алгоритму, любой метод, который производит ту же последовательность, вполне подойдет.
Вдохновленный Code Golf лучшая перестановка . Оказывается, это A277618 .
* Ноль имеет буквально одного соседа и ему все равно.
Ответы:
JavaScript (ES6), 13 байт
Возвращает й член последовательности.N
Попробуйте онлайн!
Как?
Это вычисляет:
источник
Python 2 , 20 байт
Попробуйте онлайн!
источник
MathGolf , 5 байтов
Попробуйте онлайн!
Немного хорошей симметрии здесь. Возвращает
nth
элемент последовательности.Объяснение:
источник
Желе , 5 байт
Попробуйте онлайн!
Иди иди гаджет неизвестный встроенный!
источник
Wolfram Language (Mathematica) , 14 байтов
Попробуйте онлайн!
Печать n-го целого числа с нулевым индексом в последовательности.
источник
R ,
252321 байт-2 байта благодаря Джо Кингу
Попробуйте онлайн!
Выводит
nth
элемент в последовательности.источник
dzaima / APL , 9 байт
Порт Арнаулда ответ.
Попробуйте онлайн!
источник
Пип , 14 байт
Принимает (на основе 0) в качестве аргумента командной строки и выводит . Попробуйте онлайн!N пaN
Заметьте, что . Мы жестко закодируем первые пять значений и сместим оттуда.aп + 5= аN+ 5
Или формула, которую все используют, для 12 байтов :
источник
Common Lisp , 67 байт
Попробуйте онлайн!
источник
(defun x(n)(+(mod(+ n 2)5)(- n 2)))
или(lambda(n)(+(mod(+ n 2)5)(- n 2)))
достаточно: возвращение n-го термина, а не последовательности терминов.Japt , 8 байт
Japt Переводчик
Прямой порт ответа Javascript Арнаулда. Связанная версия проходит через первые n элементов, но если
-m
флаг удален, он все еще действителен и вместо этого печатает n-й элемент.Для сравнения, вот наивная версия, которая реализует алгоритм, представленный в вопросе:
Я дам объяснение этому:
источник
05AB1E , 5 байтов
Порт ответа @ JoKing's MathGolf .
Попробуйте онлайн или проверьте первые 100 номеров .
Объяснение:
источник
Чисто , 31 байт
Формула, которую все используют.
Попробуйте онлайн!
Чисто , 80 байт
Мой первоначальный подход, возвращение первых
n
предметов.Попробуйте онлайн!
источник
Пари / ГП , 14 байтов
Попробуйте онлайн!
Пари / ГП , 14 байтов
Попробуйте онлайн!
источник
J , 30 байт
Попробуйте онлайн!
Возвращает список первых
n
чиселЭто решение, очевидно, неконкурентное, но я хотел попробовать метод на основе массива.
Объяснение:
Аргумент
n
2 ,]
- добавить 2 к входу()@
- и использовать этот список, чтобы:i.
- создать матрицуn
x 2 с числами в диапазоне 0..2n-1:4 0$~]
-~
переворачивает аргументы, поэтому это так] $ 4 0 - создает матрицуn
x 2 с повторением 4 0-
вычтите вторую матрицу из первой, чтобы первый столбец "задержался" на 2 позиции_5,./\
пройти через матрицу в неперекрывающихся группах из 5 строк и сшить столбцы[:,
расстроить весь массив2}.
- опустить первые 2 числа{.
взять первыеn
цифрыJ , 9 байт
Попробуйте онлайн!
Возвращает
n
элемент th.Порт Арнаулда ответ
источник
К (нгн / к) , 12 байт
Попробуйте онлайн!
источник
-2+x+
->x-2-
Пепе , 65 байт
Попробуйте онлайн!
Порт Джо Кинга, ответ.
источник
машинный код x86, 16 байт
Монтаж:
Попробуйте онлайн!
источник
Красный , 26 байт
Попробуйте онлайн!
Порт Арнаулда ответ
источник
Excel, 17 байт
Ничего умного. Реализует общую формулу.
источник
C (gcc) POSIX, 20 байтов
Попробуйте онлайн!
источник
QBasic, 30 байтов
Дает 0-индексированную запись списка в поз
x
.Попробуйте онлайн! (Обратите внимание, что это
?
было расширено,PRINT
потому что интерпретатор не работает в противном случае ...)источник
C # (интерактивный компилятор Visual C #) , 14 байт
Попробуйте онлайн!
Та же логика, что и у других: 1 2
источник
R , 25 байт
Попробуйте онлайн!
Ответ Порта Роберта С. (и только добавив всего 4 байта) благодаря R, превосходно работающему с векторами.
Выводит первые n значений.
источник
постоянный ток , 9 байт
Попробуйте онлайн!
Тот же метод, что и у большинства. Дублируйте верхнюю часть стопки, добавьте 2, мод 5, добавьте к оригиналу (дублированный ранее), вычтите 2, напечатайте.
источник
TI-BASIC, 11 байтов
Ans
Простой порт других ответов.
Примечание: TI-BASIC - это токенизированный язык. Количество символов не равно количеству байтов.
источник