無限に多いℕ

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

すべてのN∈ℕに対して1からNまでのすべての自然数を書くことに注意してください。

質問へのフィードバックと編集は大歓迎です。私の微積分試験に触発されました。

回答

23 Lyxal Nov 30 2020 at 21:03

スクラッチ3.0、13個の20ブロック/ 121 70バイト

SB構文として:

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

これは、シーケンス内の各用語を示しています。番号が急速に発火しないように、遅延を追加できます。

私はこれほど虐待された傷を見たことがありません。空のパラメータを使用して空の名前関数を呼び出します。私の良さ。バイトを節約するものは何でも!

-51 @ attに感謝

スクラッチで試してみてください

説明はもうすぐです。

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バイト

-Dominic vanEssenのおかげで1バイト

repeat cat(rpois(9,9)+1)

オンラインでお試しください!

\から引き出された整数のランダムな無限シーケンスを出力します$Poisson(9)\$分布(0を出力しないように+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.$$

cat9の1つのバッチ内に整数がスペースで区切られているが、バッチ間に区切り文字がないことを意味する呼び出し。出力の3桁および4桁の数値の大部分はこのアーティファクトによるものですが、少なくとも基になる乱数ジェネレーターを想定した場合、そのような数値(およびそれ以上の数値)が最終的に出力されるという理論上の保証があります。完璧です。


より大きな差異については、同じバイト数に対するジュゼッペの提案に従うことができます。

repeat cat(1%/%runif(9))

オンラインでお試しください!

これにより、より多く1のsとより大きな数が誘導されます(catアーティファクトのおかげでいくつかの非常に大きな数を含む)。この場合も、出力のサイズが無限大になると、整数の出現回数は無限大になります。


他の2つの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を加えたものを追加するたびに、1からnまでの数のリストを累積します(1は2回表示されます)。

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]

オンラインでお試しください!

ABACABAシーケンス 1,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 sedは、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の回答よりも2バイトのゴルファー(投稿時点では少なくとも...)...

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バイトのRobinRyderに感謝します。

これは、print目に見えない形で最初の引数を返すために機能します。

5 PizgenalFilegav Dec 02 2020 at 03:18

Befunge、5バイト

>1+?.

オンラインでお試しください!

各出力で、現在の数値が出力されて1にリセットされる可能性が50%あり、出力2されて現在の数値がランダムな奇数だけ増加する可能性が50%あります(指数分布に従います)。これは複数回発生する可能性があるため、奇数を出力することもできます。

すべての自然数はゼロ以外の確率で発生するため、最終的には無限に何度も出力されます。

説明

>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言語(Mathematica)、25バイト

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

オンラインでお試しください!

-1バイト@att

3 UnrelatedString Nov 30 2020 at 18:40

Brachylog、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@#\

オンラインでお試しください!

出力11 21 2 3 41 2 3 4 5 6 7 8、など、独自のライン上のすべての番号を持ちます。

  • echo@#\現在のリストのプレフィックス長を出力します。つまり、1..nnは現在のリストの長さです。これは副作用として行われます。
  • $:@,~リストをそれ自体に追加し,~、関数を再帰的に呼び出します$:@
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

Ruby、17バイト

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

オンラインでお試しください!

3 Neil Nov 30 2020 at 23:00

チャコール、8バイト

W¹«I⊕ⅉD⸿

オンラインでお試しください!リンクは、コードの詳細バージョンへのリンクです。次の番号をキャンバスに繰り返し印刷してから、キャンバス全体をダンプすることで機能します。

\を出力するバージョンの場合は2バイト$ n \$シーケンスの第3項:

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バイト

AZTECCOのおかげで5バイト節約できました!!!

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に数バイトを削ってくれて、今日何かを学ぶのを手伝ってくれてありがとう!-2バイトの@KevinCruijssenに感謝します。

3 AdamKatz Dec 03 2020 at 20:41

Bash、21バイト

s(){ seq $[++n];s;};s
1
1
2
1
2
3
…

Try ItOnlineで21Bバージョンを実行します

これは、関数を定義しs、その実行で開始各ランを持つと増分が、それはそれ自体を再帰的に実行されます。定義後、を実行します。seq NUMBERNUMBER1s

指定する5Bのコスト-s\ (区切り文字はスペース文字)の場合、26バイトで1行のソリューションごとに1つの回答に適合させることができます。

s(){ seq -s\  $[++n];s;};s
1
1 2
1 2 3
…

Try ItOnlineで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)

@ovsのおかげで1バイト節約できました

{∇1+⍴⎕←⍳⍵}1

オンラインでお試しください!

これも質問のシーケンスを使用しています。