Бесконечно много ℕ

Nov 30 2020

Задний план:

Последовательность бесконечных натуральных чисел - это последовательность, которая содержит каждое натуральное число бесконечно много раз.

Чтобы уточнить, каждое число нужно печатать несколько раз!

Соревнование:

Выведите последовательность бесконечных натуральных чисел с кратчайшим кодом.

Правила:

  1. Каждое число должно быть разделено (конечным) количеством видимых символов, пробелов или символов новой строки, которые не являются цифрами.
  2. Программа не может завершиться (если вы каким-то образом не написали все числа).
  3. Допускается любой способ записи такой последовательности.

Примеры:

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 ∈ ℕ.

Обратная связь и правка вопроса приветствуются. На основе моего экзамена по математическому анализу.

Ответы

23 Lyxal Nov 30 2020 at 21:03

Scratch 3.0 , 13 20 блоков / 121 70 байт

Как синтаксис SB:

define(n)(i
say(i
((n)+<(i)=(n)>)((1)+((i)*<(i)<(n

Это говорит каждый термин в последовательности. Можно добавить задержку, чтобы числа не срабатывали быстро.

Я никогда не видел, чтобы царапиной так злоупотребляли. Вы вызываете функцию с пустым именем с пустыми параметрами . Боже мой. Что бы ни спасало байты!

-51 спасибо @att

Попробуйте на Scratch

Объяснение скоро будет.

17 cairdcoinheringaahing Nov 30 2020 at 18:18

Шелуха , 2 байта

ḣN

Попробуйте онлайн!

Первый ответ шелухи! Также используется последовательность в вопросе

Как это устроено

ḣN - Main program
 N - The infinite list [1, 2, 3, ...]
ḣ  - Prefixes; [[1], [1, 2], [1, 2, 3], ...]
15 ovs Nov 30 2020 at 18:14

05AB1E , 2 байта

∞L

Попробуйте онлайн! Нижний колонтитул форматирует вывод, как в примере из сообщения.

выталкивает список всех натуральных чисел, Lберет диапазон [1 .. n]для каждого числа.

13 RobinRyder Nov 30 2020 at 18:59

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 получаются короче с использованием детерминированных методов: Джузеппе и Доминика ван Эссена.

10 xnor Dec 01 2020 at 07:26

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 .

9 xnor Nov 30 2020 at 23:38

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,..., но единым списком.

7 DigitalTrauma Nov 30 2020 at 18:18

Bash + GNU Coreutils, 20

seq -fseq\ %g inf|sh

Попробуйте онлайн! - Время ожидания истекает через 60 секунд.

7 DigitalTrauma Nov 30 2020 at 18:29

сед 4.2.2 , 20

:;s/(1*).*/1\1 &/p;b

Попробуйте онлайн!

В соответствии с этим мета-консенсусом, вывод является унарным .

7 Mukundan314 Dec 01 2020 at 04:51

Bash , 20 байт

seq inf|xargs -l seq

Попробуйте онлайн!

6 DominicvanEssen Dec 01 2020 at 08:36

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 ...

5 cairdcoinheringaahing Nov 30 2020 at 17:58

Желе , 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]]]и т. д.

5 LuisMendo Nov 30 2020 at 19:28

Октава , 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)\$.

5 Giuseppe Nov 30 2020 at 23:06

R , 25 21 байт

repeat T=print(T:0+1)

Попробуйте онлайн!

Отпечатки 2..1, 3..1, 4..1и пр.

Спасибо Робину Райдеру за -4 байта.

Это работает, потому что printневидимо возвращает свой первый аргумент.

5 PizgenalFilegav Dec 02 2020 at 03:18

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.
4 WheatWizard Dec 17 2020 at 23:21

передать , 27 байт

   >v
1","@"}
^+^<#-1
1+<<<

Попробуйте онлайн!

Отсчет идет от последовательных чисел.

4 J42161217 Nov 30 2020 at 18:20

Язык Wolfram Language (Mathematica) , 25 байт

Do[Print@n,{m,∞},{n,m}]

Попробуйте онлайн!

-1 байт @att

3 UnrelatedString Nov 30 2020 at 18:40

Брахилог , 4 байта

⟦₁ẉ⊥

Попробуйте онлайн!

  ẉ     Print with a newline
⟦₁      the range from 1 to something,
   ⊥    then try again.
3 Jonah Nov 30 2020 at 20:00

J , 13 байт

$:@,~[echo@#\

Попробуйте онлайн!

Выходы 1, 1 2, 1 2 3 4, 1 2 3 4 5 6 7 8и т.д., с каждым номером на своей собственной линии.

  • echo@#\Выведите длину префикса текущего списка, т.е. 1..nгде n - длина текущего списка. Это делается как побочный эффект.
  • $:@,~Присоедините список к себе ,~и вызовите функцию рекурсивно $:@.
3 Edgar Dec 01 2020 at 00:29

Ржавчина , 54 байта

(2..).for_each(|x|(1..x).for_each(|y|print!("{} ",y)))

Попробуйте онлайн

3 Sisyphus Dec 01 2020 at 00:59

Рубин , 17 байт

loop{p *1..$.+=1}

Попробуйте онлайн!

3 Neil Nov 30 2020 at 23:00

Уголь , 8 байт

W¹«I⊕ⅉD⸿

Попробуйте онлайн! Ссылка на подробную версию кода. Работает путем многократной печати следующего числа на холсте, а затем выгрузки всего холста.

2 байта для версии, которая печатает \$ n \$-й член последовательности:

IΣ

Попробуйте онлайн! Пояснение: просто печатает цифровую сумму ввода. Для любого натурального числа \$ n \$, все значения вида \$ \frac { 10 ^ n - 1 } 9 10 ^ m \$иметь цифровую сумму \$ n \$для каждого \$ m \$, поэтому каждое натуральное число встречается бесконечно часто.

3 Sisyphus Dec 01 2020 at 01:04

C (gcc) , 43 байта

i;main(j){for(;;)printf("%d ",j=--j?:++i);}

Попробуйте онлайн!

3 NinaLisitsinskaya Dec 01 2020 at 05:42

JavaScript (V8) , 26 байт

for(a=b='';;)write(a+=--b)

Попробуйте онлайн!

Символ -используется в качестве разделителя, и вывод начинается с него, поэтому я не совсем уверен, приемлемо ли это.

3 Noodle9 Nov 30 2020 at 18:26

C (gcc) , 52 49 44 байта

Сохранено 5 байт благодаря AZTECCO !!!

f(i,j){for(j=1;printf("%d ",j--);)j=j?:++i;}

Попробуйте онлайн!

3 DMiddendorf Nov 30 2020 at 20:13

Java (JDK) , 61 байт

v->{for(int i,j=2;;j++)for(i=0;++i<j;)System.out.println(i);}

Попробуйте онлайн!

Изменить: Спасибо @user за то, что сбрил несколько байтов и помог мне кое-что узнать сегодня! Большое спасибо @KevinCruijssen за -2 байта.

3 AdamKatz Dec 03 2020 at 20:41

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 в онлайн-версии

3 roblogic Dec 01 2020 at 11:40

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альтернативу, но это был беспорядок!

3 Xcali Nov 30 2020 at 19:51

Perl 5 , 22 20 байт

say while$_.=++$i.$"

Попробуйте онлайн!

2 Noodle9 Nov 30 2020 at 21:38

AWK , 34 байта

{for(;;++i)for(j=0;j++<i;)print j}

Попробуйте онлайн!

2 user Nov 30 2020 at 18:18

APL (Dyalog Unicode) , 12 11 байт (SBCS)

Сохранен 1 байт благодаря @ovs

{∇1+⍴⎕←⍳⍵}1

Попробуйте онлайн!

Здесь также используется последовательность из вопроса.