무한히 많은 ℕ

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

Husk , 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 van Essen 덕분에 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.$$

호출 cat은 9 개의 한 배치 내에 정수가 공백으로 구분되지만 배치 사이에 구분 기호가 없음을 의미합니다. 출력에있는 3 자리 및 4 자리 숫자의 대부분은이 인공물로 인한 것이지만, 최소한 기본 난수 생성기를 가정한다면 이러한 숫자 (및 더 큰 숫자)가 결국 출력 될 것이라는 이론적 보장이 있습니다. 완벽합니다.


더 큰 분산의 경우 동일한 바이트 수에 대한 Giuseppe의 제안을 따를 수 있습니다.

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

온라인으로 시도하십시오!

이것은 더 많은 1s와 더 많은 수를 유도 합니다 ( cat아티팩트 덕분에 매우 큰 수 포함 ). 다시 말하지만, 모든 정수의 발생 횟수는 출력 크기가 무한대가 될 때 무한대가됩니다.


결정 론적 방법을 사용하여 두 개의 다른 R 답변이 더 짧게 나옵니다 : Giuseppe 와 Dominic van Essen

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이 두 번 나타나는 경우 제외).

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

sed 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 바이트

(또한 Robin Ryder에 의해 거의 동시에 확인 됨)

while(T<-T+1)cat(T:0)

온라인으로 시도하십시오!

예제 시퀀스와 비슷하지만 각 하위 시리즈가 반전되고 각 하위 시리즈의 초기 값이 초기 0으로 표시됩니다 ( 03예 : 3의 경우).

초기 0이 마음에 들지 않으면 show(아래)를 사용하여 이전 버전을 보거나 Giuseppe의 답변을 참조하십시오 .


R , 23 22 바이트

편집 : Robin Ryder 덕분에 -1 바이트

while(T<-T+1)show(1:T)

온라인으로 시도하십시오!

예제에 사용 된 시퀀스와 숫자의 추가 무한 복사본을 출력합니다 1.
각 숫자는 공백 " ", 줄 바꿈과 대괄호, " \n["또는 대괄호와 공백 " [ "으로 구분됩니다.

다른 두 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\$0으로 반올림됩니다. 여기서 \$r\$구간 \ 에 균등 분포가 있습니다.$(0,1)\$.

주어진 인덱스에 대해 \$k\$, 및 모든 \$n \in \mathbb N\$, 0이 아닌 확률이 \$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 바이트에 대한 Robin Ryder에게 감사드립니다.

이것은 print보이지 않게 첫 번째 인수를 반환 하기 때문에 작동 합니다.

5 PizgenalFilegav Dec 02 2020 at 03:18

Befunge , 5 바이트

>1+?.

온라인으로 시도하십시오!

각 출력에서 ​​현재 숫자가 인쇄되고 1로 재설정 2될 확률은 50 % 이고, 인쇄 될 확률은 50 % 이고 현재 숫자는 임의의 홀수 (지수 분포에 따라)만큼 증가합니다. 이것은 여러 번 발생할 수 있으므로 홀수도 출력 할 수 있습니다.

모든 자연수는 발생할 확률이 0이 아니므로 결국 무한히 여러 번 인쇄됩니다.

설명

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

온라인으로 시도하십시오!

출력 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

Rust , 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 \$시퀀스의 제 1 항 :

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

자바 (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 It Online에서 21B 버전 실행

이 함수를 정의 s하는 실행 의 시작 각 실행와 증가가, 다음은 자신을 재귀 적으로 실행됩니다. 정의 후에 .seq NUMBERNUMBER1s

지정 (5B)의 비용 -s\ (세퍼레이터 공백 문자 임), 그것은 하나의 적응 될 수 않음 26 바이트에서 라인 당 용액 :

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

Try It Online에서 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

온라인으로 시도하십시오!

이것은 또한 질문의 순서를 사용합니다.