Бесконечно много ℕ
Задний план:
Последовательность бесконечных натуральных чисел - это последовательность, которая содержит каждое натуральное число бесконечно много раз.
Чтобы уточнить, каждое число нужно печатать несколько раз!
Соревнование:
Выведите последовательность бесконечных натуральных чисел с кратчайшим кодом.
Правила:
- Каждое число должно быть разделено (конечным) количеством видимых символов, пробелов или символов новой строки, которые не являются цифрами.
- Программа не может завершиться (если вы каким-то образом не написали все числа).
- Допускается любой способ записи такой последовательности.
Примеры:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
...
1, 1, 2, 1, 2, 3, 1, 2, 3, 4...
Обратите внимание, что мы пишем все натуральные числа от 1 до N для всех N ∈ ℕ.
Обратная связь и правка вопроса приветствуются. На основе моего экзамена по математическому анализу.
Ответы
Scratch 3.0 , 13 20 блоков / 121 70 байт
Как синтаксис SB:
define(n)(i
say(i
((n)+<(i)=(n)>)((1)+((i)*<(i)<(n
Это говорит каждый термин в последовательности. Можно добавить задержку, чтобы числа не срабатывали быстро.
Я никогда не видел, чтобы царапиной так злоупотребляли. Вы вызываете функцию с пустым именем с пустыми параметрами . Боже мой. Что бы ни спасало байты!
-51 спасибо @att
Попробуйте на Scratch
Объяснение скоро будет.
Шелуха , 2 байта
ḣN
Попробуйте онлайн!
Первый ответ шелухи! Также используется последовательность в вопросе
Как это устроено
ḣN - Main program
N - The infinite list [1, 2, 3, ...]
ḣ - Prefixes; [[1], [1, 2], [1, 2, 3], ...]
05AB1E , 2 байта
∞L
Попробуйте онлайн! Нижний колонтитул форматирует вывод, как в примере из сообщения.
∞выталкивает список всех натуральных чисел, Lберет диапазон [1 .. n]для каждого числа.
R , 26 25 24 байта
-1 байт благодаря Доминику ван Эссену
repeat cat(rpois(9,9)+1)
Попробуйте онлайн!
Выводит случайную бесконечную последовательность целых чисел, взятую из \$Poisson(9)\$распределение (+1, чтобы не выводить нули). Они выводятся партиями по 9 штук, для большей «эффективности». Подойдет любое положительное значение среднего; использование среднего значения 9 максимизирует дисперсию для 1-значных чисел.
Все числа встречаются бесконечно часто в том смысле, что для любого целого \$k\$, ожидаемое количество вхождений \$k\$в первом \$n\$реализации идет в \$\infty\$как \$n\to\infty\$:
$$E\left[\sum_{i=1}^n\mathbb{I}_{X_i=k}\right]\xrightarrow[n\to\infty]{}\infty.$$
Вызовы catозначают, что целые числа в одной партии из 9 разделены пробелами, но между партиями нет разделителя. Подавляющее большинство 3- и 4-значных чисел на выходе связано с этим артефактом, но есть теоретическая гарантия, что такие числа (и более крупные числа) будут выведены в конечном итоге, по крайней мере, если мы предположим, что основной генератор случайных чисел идеально.
Для большей дисперсии мы можем последовать предложению Джузеппе для того же количества байтов:
repeat cat(1%/%runif(9))
Попробуйте онлайн!
Это приводит к увеличению числа 1s и больших чисел (включая некоторые очень большие числа благодаря catартефакту). Опять же, количество вхождений любого целого числа стремится к бесконечности, когда размер вывода стремится к бесконечности.
Два других ответа R получаются короче с использованием детерминированных методов: Джузеппе и Доминика ван Эссена.
Python 2 , 31 байт
R=1,
while 1:print R;R+=len(R),
Попробуйте онлайн!
Спасибо @Danis за сохранение здесь байта R+=R[-1]+1,. Этот
Печать:
(1,)
(1, 1)
(1, 1, 2)
(1, 1, 2, 3)
(1, 1, 2, 3, 4)
(1, 1, 2, 3, 4, 5)
...
Накапливает список чисел от 1 до n (за исключением того, что 1 появляется дважды) каждый раз, добавляя последний элемент плюс один.
32 байта
R=[1]
for x in R:print R;R+=x+1,
Попробуйте онлайн!
Python 2 , 30 байт (предположительно)
n=2
while 1:print~-2**n%n;n+=1
Попробуйте онлайн!
Последовательность \$2^n \bmod n\$Предполагается, что ( A015910 ) принимает все значения \$k \geq 0\$кроме \$k=1\$. Я не знаю, предполагается ли, что каждое значение встречается бесконечно много раз, но похоже, что это согласуется с известными решениями для конкретных значений .
Вместо этого мы вычисляем \$(2^n-1) \bmod n\$, что делает \$0\$а не \$1\$ быть единственным отсутствующим значением (если гипотеза верна).
Глядя на результат, вы можете подумать, что \$2\$никогда не выводится, но фактически появляется первым для \$n=4700063497\$и для прогрессивно более высоких значений в A050259 .
Python 2 , 33 байта
R=[1]
for x in R:print x;R+=x+1,1
Попробуйте онлайн!
Это длиннее, но довольно изящно, печатает последовательность ABACABA .
Haskell , 17 байт
[[1..x]|x<-[1..]]
Попробуйте онлайн!
Поскольку задача, похоже, допускает нестандартный вывод, мы можем просто сгенерировать список списков [1],[1,2],[1,2,3,],..., как предлагает @AZTECCO.
Haskell , 19 байт
l=1:do x<-l;[x+1,1]
Попробуйте онлайн!
Рекурсивно определенный бесконечный плоский список с последовательностью ABACABA1,2,1,3,1,2,1,4,... ( A001511 ).
Вариант такой же длины:
l=(:[1]).succ=<<0:l
Попробуйте онлайн!
20 байт
l=do x<-[1..];[1..x]
Попробуйте онлайн!
Считаю 1,1,2,1,2,3,1,2,3,4,..., но единым списком.
Bash + GNU Coreutils, 20
seq -fseq\ %g inf|sh
Попробуйте онлайн! - Время ожидания истекает через 60 секунд.
сед 4.2.2 , 20
:;s/(1*).*/1\1 &/p;b
Попробуйте онлайн!
В соответствии с этим мета-консенсусом, вывод является унарным .
Bash , 20 байт
seq inf|xargs -l seq
Попробуйте онлайн!
R , 21 байт
(также почти одновременно идентифицирован Робином Райдером)
while(T<-T+1)cat(T:0)
Попробуйте онлайн!
Подобно примерной последовательности, но каждая подсерия перевернута, и начальное значение в каждой подсерии представлено начальным нулем (так, 03например , для 3).
Если вам не нравятся начальные нули, посмотрите на предыдущую версию, используя show(ниже), или на ответ Джузеппе .
R , 23 22 байта
Изменить: -1 байт благодаря Робину Райдеру
while(T<-T+1)show(1:T)
Попробуйте онлайн!
Выводит последовательность, используемую в примере, плюс дополнительное бесконечное количество копий числа 1.
Каждое число отделяется пробелом « », новой строкой и скобкой « \n[» или скобкой и пробелом « [ ».
На 2 байта лучше (во время публикации, по крайней мере ...), чем два других ответа R ...
Желе , 4 байта
‘RṄß
Попробуйте онлайн!
Я думаю, что это выводит все числа бесконечное количество раз, но поскольку это другой формат вывода, я не уверен на 100%
Как это устроено
‘RṄß - Main link. Left argument is initially n = 0
‘ - Increment
R - Range
Ṅ - Print
ß - Recursively run the main link
Для получения n = 0, ‘RṄвыходов [1]. Затем мы выполняем рекурсию, используя n = [1]. ‘RṄзатем выводит [[1, 2]], и мы снова рекурсивно используем n = [[1, 2]], который выводит [[[1, 2], [1, 2, 3]]]и т. д.
Октава , 29 28 байт
do disp(fix(1/rand)) until 0
Попробуйте онлайн!
Это выводит последовательность \$(x_k)\$независимых, одинаково распределенных случайных натуральных чисел. Каждое значение \$x_k\$получается как \$1/r\$с округлением до нуля, где \$r\$имеет равномерное распределение на интервале \$(0,1)\$.
Для данного индекса \$k\$, и для любого \$n \in \mathbb N\$существует ненулевая вероятность того, что \$x_k=n\$(игнорируя неточности с плавающей запятой). Следовательно, с вероятностью \$1\$каждые \$n\$бесконечно часто встречается в последовательности \$(x_k)\$.
R , 25 21 байт
repeat T=print(T:0+1)
Попробуйте онлайн!
Отпечатки 2..1, 3..1, 4..1и пр.
Спасибо Робину Райдеру за -4 байта.
Это работает, потому что printневидимо возвращает свой первый аргумент.
Befunge , 5 байт
>1+?.
Попробуйте онлайн!
На каждом выходе существует 50% -ная вероятность того, что текущее число будет напечатано и сброшено до 1, и 50% -ная вероятность, что 2будет напечатано и текущее число увеличится на какое-то случайное нечетное число (в соответствии с экспоненциальным распределением). Это может происходить несколько раз, поэтому можно выводить и нечетные числа.
Каждое натуральное число имеет ненулевую вероятность выпадения, поэтому в конечном итоге оно будет напечатано бесконечно много раз.
Объяснение
>1+?.
> # Go east.
1+ # Initialize a counter to 1.
? # Go in a random direction.
# If the instruction pointer goes west:
+ # Add the top two stack elements together.
# If there is a 2 on top, this adds it to the counter.
# If not, this does nothing.
1 # Create a new 1 on the top of the stack.
> # Go east.
1+ # Add 1 to get 2, which remains on top of the counter.
? # Repeat.
? # If the IP goes east:
. # Print and delete the top of the stack.
> # Go east.
1+ # Add 1.
# If there was a 2 that was printed and the counter remains, the 1 gets added to it.
# If the counter was printed instead, this creates a new 1.
? # Repeat.
? # If the IP goes north or south, it wraps around to the ? instruction and repeats.
Befunge-98 , 14 байт
]:.1-:0`j
]:+!
Попробуйте онлайн!
Детерминированное решение, печатающее каждый диапазон от 1 до nв порядке убывания.
Объяснение
] # Turn right (to the south) and go to the second line.
]:+!
] # Turn right again (to the west).
! # Take the logical NOT of the secondary counter (which is now 0) to get 1.
+ # Add the 1 to the main counter.
: # Duplicate the main counter to form a secondary counter.
] # Turn right (to the north) and go to the first line.
]:.1-:0`j
] # Turn right (to the east).
: # Duplicate the secondary counter.
. # Print and delete the duplicate.
1- # Subtract 1 from the secondary counter.
0` # Is the secondary counter greater than 0?
j # If so, jump over the ] instruction and repeat the first line.
] # If not, turn right (to the south) and go to the second line.
передать , 27 байт
>v
1","@"}
^+^<#-1
1+<<<
Попробуйте онлайн!
Отсчет идет от последовательных чисел.
Язык Wolfram Language (Mathematica) , 25 байт
Do[Print@n,{m,∞},{n,m}]
Попробуйте онлайн!
-1 байт @att
Брахилог , 4 байта
⟦₁ẉ⊥
Попробуйте онлайн!
ẉ Print with a newline
⟦₁ the range from 1 to something,
⊥ then try again.
J , 13 байт
$:@,~[echo@#\
Попробуйте онлайн!
Выходы 1, 1 2, 1 2 3 4, 1 2 3 4 5 6 7 8и т.д., с каждым номером на своей собственной линии.
echo@#\Выведите длину префикса текущего списка, т.е.1..nгде n - длина текущего списка. Это делается как побочный эффект.$:@,~Присоедините список к себе,~и вызовите функцию рекурсивно$:@.
Ржавчина , 54 байта
(2..).for_each(|x|(1..x).for_each(|y|print!("{} ",y)))
Попробуйте онлайн
Рубин , 17 байт
loop{p *1..$.+=1}
Попробуйте онлайн!
Уголь , 8 байт
W¹«I⊕ⅉD⸿
Попробуйте онлайн! Ссылка на подробную версию кода. Работает путем многократной печати следующего числа на холсте, а затем выгрузки всего холста.
2 байта для версии, которая печатает \$ n \$-й член последовательности:
IΣ
Попробуйте онлайн! Пояснение: просто печатает цифровую сумму ввода. Для любого натурального числа \$ n \$, все значения вида \$ \frac { 10 ^ n - 1 } 9 10 ^ m \$иметь цифровую сумму \$ n \$для каждого \$ m \$, поэтому каждое натуральное число встречается бесконечно часто.
C (gcc) , 43 байта
i;main(j){for(;;)printf("%d ",j=--j?:++i);}
Попробуйте онлайн!
JavaScript (V8) , 26 байт
for(a=b='';;)write(a+=--b)
Попробуйте онлайн!
Символ -используется в качестве разделителя, и вывод начинается с него, поэтому я не совсем уверен, приемлемо ли это.
C (gcc) , 52 49 44 байта
Сохранено 5 байт благодаря AZTECCO !!!
f(i,j){for(j=1;printf("%d ",j--);)j=j?:++i;}
Попробуйте онлайн!
Java (JDK) , 61 байт
v->{for(int i,j=2;;j++)for(i=0;++i<j;)System.out.println(i);}
Попробуйте онлайн!
Изменить: Спасибо @user за то, что сбрил несколько байтов и помог мне кое-что узнать сегодня! Большое спасибо @KevinCruijssen за -2 байта.
Bash, 21 байт
s(){ seq $[++n];s;};s
1
1
2
1
2
3
…
Запустите версию 21B на сайте Try It Online
Это определяет функцию, sкоторая запускается seq NUMBERтам, где NUMBERначинается, 1и увеличивается с каждым запуском, а затем запускается рекурсивно. После определения бежим s.
Чтобы указать стоимость 5B -s\ (разделитель - пробел), ее можно адаптировать к решению с одним ответом на строку размером 26 байтов:
s(){ seq -s\ $[++n];s;};s
1
1 2
1 2 3
…
Запустите версию 26B в онлайн-версии
Zsh, 29 .. 19 байт
Решение от @AdamKatz: попробуйте онлайн!
for ((;++i;))seq $i
19 байтов, порт из bash: s(){seq $[++n];s};s
25 байтов (на @AdamKatz): for ((;++i;))echo {1..$i}
25 байтов : for ((;;i++))shuf -i 1-$i
26 байтов (на @AdamKatz): for ((;;))echo {1..$[++i]}
29 байтов : for ((i=1;;))echo {1..$[i++]}
я пытался использовать /dev/randomальтернативу, но это был беспорядок!
Perl 5 , 22 20 байт
say while$_.=++$i.$"
Попробуйте онлайн!
AWK , 34 байта
{for(;;++i)for(j=0;j++<i;)print j}
Попробуйте онлайн!
APL (Dyalog Unicode) , 12 11 байт (SBCS)
Сохранен 1 байт благодаря @ovs
{∇1+⍴⎕←⍳⍵}1
Попробуйте онлайн!
Здесь также используется последовательность из вопроса.