Определение
Будем называть (бесконечную) целочисленную последовательность универсальной, если она содержит каждую конечную целочисленную последовательность как непрерывную подпоследовательность.
Другими словами, целочисленная последовательность (a 1 , a 2 ,…) универсальна тогда и только тогда, когда для каждой конечной целочисленной последовательности (b 1 ,…, b n ) существует смещение k, такое что (a k + 1) ,…, A k + n ) = (b 1 ,…, b n ) .
Например, последовательность положительных простых чисел не является универсальной, в том числе по следующим причинам.
Он не содержит отрицательных целых чисел, 1 или составных чисел.
Хотя он содержит 3 , он не содержит смежную подпоследовательность (3, 3, 3) .
Хотя он содержит 2 и 5 , он не содержит смежную подпоследовательность (2, 5) .
Хотя он содержит смежную подпоследовательность (7, 11, 13) , он не содержит смежную подпоследовательность (13, 11, 7) .
задача
Выберите любую единственную универсальную целочисленную последовательность (a 1 , a 2 ,…) и реализуйте ее на языке программирования по вашему выбору, соблюдая следующие правила.
Вы можете отправить полную программу или функцию.
У вас есть три варианта ввода / вывода:
Не вводите и распечатайте или верните всю последовательность.
Возьмем индекс п в качестве входных данных и печати или вернуться к п .
Возьмите индекс n в качестве ввода и напечатайте или верните (a 1 ,…, a n ) .
Для вариантов ввода-вывода 2 и 3 вы можете использовать индексацию на основе 0, если хотите.
Ваше представление должно быть детерминированным: если запускаться несколько раз с одним и тем же вводом, он должен давать одинаковый вывод.
Кроме того, если это не очевидно сразу, пожалуйста, докажите, что выбранная вами последовательность является универсальной. Ваше доказательство может не зависеть от недоказанных догадок.
Применяются стандартные правила игры в гольф . Пусть победит самый короткий код в байтах!
Ответы:
Шелуха , 5 байт
Это печатает бесконечный список
Попробуйте онлайн! или найдите первый индекс вашей последовательности . (Занимает много памяти для большинства последовательностей)
Объяснение:
В шелухе
Ṗ
ведет себя красиво для бесконечных списков. Вы можете увидеть это поведение здесьисточник
Q
работает. (Я думаю, что получил, но я не уверен.)Ṗ
, неQ
Python 2 ,
494643 байтаf(n)
возвращает п только. Это использует наименьшую цифру в базе, чтобы извлечь одну из старших цифр.n
d
Попробуйте онлайн! Этот сценарий (любезно предоставленный Деннисом) принимает любую конечную последовательность и дает вам место,
n
где начинается эта последовательность.объяснение
Например, для
n
в диапазоне3141592650
до3141592659
,d=10
и последней цифреn
выбирает одну из других цифр. Затем мы добавляем,-d/2
чтобы получить отрицательные значения.Автономная альтернатива, также 43 байта:
источник
len(`n`)
вместоlen(str(n))
.n=2**63-1
так как представлениеL
добавляется (str(n)
будет адресовано это для трех байтов, если это необходимо).Brachylog 2, 11 байт
Попробуйте онлайн!
Я также попробовал алгоритм с использованием аддитивных разделов в списке, но он был не короче. Это генератор, который выдает бесконечный поток целых чисел в качестве выходных данных; ссылка TIO имеет заголовок для печати первых десяти тысяч из них.
объяснение
Программа запускается, пробуя все возможные целые числа в последовательности (пробуя все
≜
оставшиеся возможности, для целых чисел по умолчанию). Это 0, 1, -1, 2, -2 и т. Д. (Хотя отрицательные целые числа не достигают конца программы). Это единственный «бесконечный» шаг программы; все остальные конечны.~×
затем генерирует все возможные факторизации целого числа, рассматривая разные порядки как разные и используя только значения от 2 и выше (таким образом, существует только конечное число); обратите внимание, что составные числа допускаются при факторизации, а не только простые числа. Это означает, что все возможные последовательности целых чисел ≥ 2 будут сгенерированы этим шагом в некоторый момент выполнения функции (поскольку такая последовательность обязательно имеет некоторый продукт, и этот продукт будет сгенерирован в некоторой точке исходным кодом≜
).Затем нам нужно отобразить набор этих последовательностей на набор всех целочисленных последовательностей, что делается в два этапа: вычитая 2 (
-₂
) из каждого элемента (ᵐ
), давая нам набор всех неотрицательных целочисленных последовательностей, затем принимая плюс или минус (~ȧ
т. е. «значение, абсолютное значение которого равно») каждый элемент (ᵐ
). Последний шаг явно недетерминирован, поэтому Brachylog рассматривает его как генератор, генерирующий все возможные списки, элементы которых плюс или минус соответствующий элемент входного списка. Это означает, что у нас теперь есть генератор для всех возможных целочисленных последовательностей, и он генерирует их в порядке, означающем, что они все сгенерированы (в частности, порядок, который вы получите, если вы берете абсолютное значение каждого элемента, добавьте 2 к каждому элемент, а затем упорядочить по произведению полученных элементов).К сожалению, вопрос требует единственной последовательности, а не последовательности последовательностей, поэтому нам нужны еще две команды. Во-первых,
≜
просит Brachylog строго сгенерировать последовательность последовательностей в явном виде (в отличие от создания структуры данных, описывающей концепцию последовательности, сгенерированной с помощью этого метода, а не фактической генерации последовательностей до тех пор, пока это не потребуется); в обоих случаях это ускоряет работу программы и гарантирует, что вывод будет произведен в запрошенном порядке. Наконец,∋
заставляет генератор выводить элементы отдельных последовательностей по одному (переходя к следующей последовательности, как только он выводит все элементы предыдущей).Конечный результат: каждая возможная целочисленная последовательность генерируется и выводится по одному элементу за раз, и все объединяются в одну универсальную последовательность.
источник
Pyth - 11 байт
n
сила декартового произведения[-n, n]
, для всехn
.Попробуйте онлайн здесь (конечно).
источник
Python 2 ,
10099 байтitertools
встроенный в бесконечный цикл.Попробуйте онлайн!
Неограниченно печатает все перестановки
n
многократного целочисленного диапазона[-n; n)
для всех неотрицательных целых чиселn
.Вы можете искать первое смещение
k
для любой подпоследовательности, используя эту модифицированную версию .источник
while~0:
, Хе-хе ...itertools.count
Perl 6 , 91 байт
Попробуйте онлайн!
Это использует метод, аналогичный другим ответам. Он использует декартовы произведения для печати элементов
(-1,0,1)
, затем всех упорядоченных пар элементов(-2,-1,0,1,2)
, затем всех упорядоченных триплетов элементов в(-3,-2,-1,0,1,2,3)
и т. Д.Я новичок в Perl, так что, возможно, будет больше игры в гольф.
Более читаемая версия:
источник