무한히 많은 ℕ
배경:
무한 자연수의 시퀀스는 모든 자연수를 무한히 여러 번 포함하는 시퀀스입니다.
명확히하기 위해 모든 숫자는 여러 번 인쇄되어야합니다!
과제 :
가장 짧은 코드를 사용하여 무한 자연의 시퀀스를 출력합니다.
규칙 :
- 각 숫자는 숫자가 아닌 표시, 공백 또는 줄 바꾸기 문자의 (제한된) 양으로 구분되어야합니다.
- 프로그램은 종료 할 수 없습니다 (어떻게 든 모든 숫자를 작성하지 않는 한).
- 이러한 시퀀스를 작성하는 모든 방법이 허용됩니다.
예 :
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까지의 모든 자연을 씁니다.
질문에 대한 피드백 및 편집을 환영합니다. 미적분 시험에서 영감을 얻었습니다.
답변
스크래치 3.0 , 13 20 블록 / 121 70 바이트

SB 구문 :
define(n)(i
say(i
((n)+<(i)=(n)>)((1)+((i)*<(i)<(n
이것은 시퀀스의 각 용어를 말합니다. 숫자가 빠르게 실행되지 않도록 지연을 추가 할 수 있습니다.
나는 스크래치가 그렇게 남용되는 것을 본 적이 없습니다. 빈 매개 변수를 사용 하여 빈 이름 함수를 호출합니다 . 이럴 수가. 무엇이든지 바이트를 절약합니다!
-51 @att 덕분에
스크래치에서 시도
곧 설명이 올 것입니다.
Husk , 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 바이트
-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))
온라인으로 시도하십시오!
이것은 더 많은 1
s와 더 많은 수를 유도 합니다 ( cat
아티팩트 덕분에 매우 큰 수 포함 ). 다시 말하지만, 모든 정수의 발생 횟수는 출력 크기가 무한대가 될 때 무한대가됩니다.
결정 론적 방법을 사용하여 두 개의 다른 R 답변이 더 짧게 나옵니다 : Giuseppe 와 Dominic van Essen
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 시퀀스를 인쇄합니다 .
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,...
중이지만 플랫 목록입니다.
Bash + GNU Coreutils, 20
seq -fseq\ %g inf|sh
온라인으로 시도하십시오! -60 초 후에 타임 아웃됩니다.
sed 4.2.2 , 20
:;s/(1*).*/1\1 &/p;b
온라인으로 시도하십시오!
이 메타 합의에 따라 출력은 단항 입니다.
Bash , 20 바이트
seq inf|xargs -l seq
온라인으로 시도하십시오!
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 바이트 골퍼 (게시 당시 적어도 ...)
젤리 , 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\$0으로 반올림됩니다. 여기서 \$r\$구간 \ 에 균등 분포가 있습니다.$(0,1)\$.
주어진 인덱스에 대해 \$k\$, 및 모든 \$n \in \mathbb N\$, 0이 아닌 확률이 \$x_k=n\$(부동 소수점 부정확성 무시). 따라서 확률로 \$1\$매 \$n\$순서에 무한 종종 나타납니다 \$(x_k)\$.
R , 25 21 바이트
repeat T=print(T:0+1)
온라인으로 시도하십시오!
인쇄 2..1, 3..1, 4..1
등.
-4 바이트에 대한 Robin Ryder에게 감사드립니다.
이것은 print
보이지 않게 첫 번째 인수를 반환 하기 때문에 작동 합니다.
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.
전달 , 27 바이트
>v
1","@"}
^+^<#-1
1+<<<
온라인으로 시도하십시오!

연속 된 숫자부터 카운트 다운됩니다.
Wolfram 언어 (Mathematica) , 25 바이트
Do[Print@n,{m,∞},{n,m}]
온라인으로 시도하십시오!
-1 바이트 @att
Brachylog , 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은 현재 목록 길이입니다. 이것은 부작용으로 이루어집니다.$:@,~
목록을 자체에 추가하고,~
함수를 재귀 적으로 호출합니다$:@
.
Rust , 54 바이트
(2..).for_each(|x|(1..x).for_each(|y|print!("{} ",y)))
온라인으로 시도
Ruby , 17 바이트
loop{p *1..$.+=1}
온라인으로 시도하십시오!
목탄 , 8 바이트
W¹«I⊕ⅉD⸿
온라인으로 시도하십시오! 링크는 자세한 코드 버전입니다. 다음 번호를 캔버스에 반복적으로 인쇄 한 다음 전체 캔버스를 덤프하는 방식으로 작동합니다.
\ 를 인쇄하는 버전의 경우 2 바이트$ n \$시퀀스의 제 1 항 :
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 바이트
AZTECCO 덕분에 5 바이트 절약 !!!
f(i,j){for(j=1;printf("%d ",j--);)j=j?:++i;}
온라인으로 시도하십시오!
자바 (JDK) , 61 바이트
v->{for(int i,j=2;;j++)for(i=0;++i<j;)System.out.println(i);}
온라인으로 시도하십시오!
편집 : 몇 바이트를 줄이고 오늘 무언가를 배우도록 도와 주신 @user에게 감사드립니다! -2 바이트에 대해 @KevinCruijssen에게 큰 감사를 표합니다.
Bash, 21 바이트
s(){ seq $[++n];s;};s
1
1
2
1
2
3
…
Try It Online에서 21B 버전 실행
이 함수를 정의 s
하는 실행 의 시작 각 실행와 증가가, 다음은 자신을 재귀 적으로 실행됩니다. 정의 후에 .seq NUMBER
NUMBER
1
s
지정 (5B)의 비용 -s\
(세퍼레이터 공백 문자 임), 그것은 하나의 적응 될 수 않음 26 바이트에서 라인 당 용액 :
s(){ seq -s\ $[++n];s;};s
1
1 2
1 2 3
…
Try It Online에서 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)
@ovs 덕분에 1 바이트 절약
{∇1+⍴⎕←⍳⍵}1
온라인으로 시도하십시오!
이것은 또한 질문의 순서를 사용합니다.