Nhiều vô hạn ℕ

Nov 30 2020

Lý lịch:

Dãy số tự nhiên vô hạn là dãy chứa mọi số tự nhiên vô hạn tuần hoàn.

Để làm rõ, mọi số phải được in nhiều lần!

Các thách thức:

Đưa ra một dãy các số tự nhiên vô hạn với mã ngắn nhất.

Quy tắc:

  1. Mỗi số phải được phân tách bằng một lượng (hữu hạn) các ký tự dòng hiển thị, khoảng trắng hoặc dòng mới không phải là một chữ số.
  2. Chương trình không thể kết thúc (trừ khi bằng cách nào đó bạn đã viết tất cả các số).
  3. Mọi cách viết trình tự như vậy đều có thể chấp nhận được.

Ví dụ:

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

Chú ý rằng chúng ta viết tất cả các số tự nhiên từ 1 đến N với mọi N ∈ ℕ.

Phản hồi và chỉnh sửa câu hỏi được hoan nghênh. Lấy cảm hứng từ kỳ thi Giải tích của tôi.

Trả lời

23 Lyxal Nov 30 2020 at 21:03

Scratch 3.0 , 13 20 khối / 121 70 byte

Như SB Cú pháp:

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

Điều này cho biết mỗi thuật ngữ trong chuỗi. Có thể thêm thời gian trễ để các con số không nhanh chóng hoạt động.

Tôi chưa bao giờ thấy vết xước bị lạm dụng như vậy. Bạn gọi hàm tên rỗng với các tham số trống . Trời ơi. Bất cứ điều gì tiết kiệm byte!

-51 cảm ơn @att

Dùng thử trên Scratch

Lời giải thích sắp sửa.

17 cairdcoinheringaahing Nov 30 2020 at 18:18

Husk , 2 byte

ḣN

Hãy thử nó trực tuyến!

Câu trả lời đầu tiên của Husk! Cũng sử dụng trình tự trong câu hỏi

Làm thế nào nó hoạt động

ḣ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 byte

∞L

Hãy thử nó trực tuyến! Chân trang định dạng đầu ra giống như ví dụ từ bài đăng.

đẩy một danh sách tất cả các số tự nhiên, Llấy phạm vi [1 .. n]cho mỗi số.

13 RobinRyder Nov 30 2020 at 18:59

R , 26 25 24 byte

-1 byte cảm ơn Dominic van Essen

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

Hãy thử nó trực tuyến!

Xuất ra một chuỗi số nguyên vô hạn ngẫu nhiên, được rút ra từ \$Poisson(9)\$phân phối (+1 để tránh xuất ra bất kỳ số 0 nào). Chúng được sản xuất theo lô 9 chiếc cùng một lúc để "hiệu quả" hơn. Bất kỳ giá trị dương nào của giá trị trung bình sẽ hoạt động; sử dụng giá trị trung bình là 9 sẽ tối đa hóa phương sai cho các số có 1 ký tự.

Tất cả các số xuất hiện thường xuyên vô hạn theo nghĩa là đối với bất kỳ số nguyên \$k\$, số lần xuất hiện dự kiến ​​của \$k\$trong lần đầu tiên \$n\$nhận thức được chuyển đến \$\infty\$như \$n\to\infty\$:

$$E\left[\sum_{i=1}^n\mathbb{I}_{X_i=k}\right]\xrightarrow[n\to\infty]{}\infty.$$

Các lệnh gọi catcó nghĩa là có các số nguyên trong một lô 9 được phân tách bằng dấu cách, nhưng không có dấu phân cách giữa các lô. Phần lớn các số 3 và 4 chữ số trong đầu ra là do tác phẩm này, nhưng có một đảm bảo về mặt lý thuyết rằng những con số như vậy (và các số lớn hơn) cuối cùng sẽ được xuất ra, ít nhất là nếu chúng ta giả định rằng bộ tạo số ngẫu nhiên là hoàn hảo.


Đối với một phương sai lớn hơn, chúng ta có thể làm theo gợi ý của Giuseppe để có cùng số byte:

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

Hãy thử nó trực tuyến!

Điều này tạo ra nhiều 1s và số lượng lớn hơn (bao gồm một số số lượng rất lớn nhờ catđồ tạo tác). Một lần nữa, số lần xuất hiện của bất kỳ số nguyên nào sẽ đến vô cùng khi kích thước của đầu ra đi đến vô cùng.


Hai câu trả lời R khác ngắn hơn, sử dụng phương pháp xác định: của Giuseppe và Dominic van Essen

10 xnor Dec 01 2020 at 07:26

Python 2 , 31 byte

R=1,
while 1:print R;R+=len(R),

Hãy thử nó trực tuyến!

Cảm ơn @Danis đã lưu một byte ở đây R+=R[-1]+1,. Điều này

Bản in:

(1,)
(1, 1)
(1, 1, 2)
(1, 1, 2, 3)
(1, 1, 2, 3, 4)
(1, 1, 2, 3, 4, 5)
    ...

Tích lũy danh sách các số từ 1 đến n (ngoại trừ 1 xuất hiện hai lần) mỗi lần thêm phần tử cuối cùng với một phần tử.

32 byte

R=[1]
for x in R:print R;R+=x+1,

Hãy thử nó trực tuyến!


Python 2 , 30 byte (phỏng đoán)

n=2
while 1:print~-2**n%n;n+=1

Hãy thử nó trực tuyến!

Trình tự của \$2^n \bmod n\$( A015910 ) được phỏng đoán là có tất cả các giá trị \$k \geq 0\$ngoại trừ \$k=1\$. Tôi không biết có phải người ta cũng phỏng đoán rằng mỗi giá trị xuất hiện vô số lần hay không, nhưng nó có vẻ phù hợp với các giải pháp đã biết cho các giá trị cụ thể .

Thay vào đó, chúng tôi tính toán \$(2^n-1) \bmod n\$, điều này làm cho \$0\$hơn là \$1\$ là giá trị bị thiếu duy nhất (nếu phỏng đoán đúng).

Nhìn vào kết quả, bạn có thể nghĩ rằng \$2\$không bao giờ là đầu ra, nhưng trên thực tế, nó xuất hiện đầu tiên cho \$n=4700063497\$và cho các giá trị cao hơn dần dần trong A050259 .


Python 2 , 33 byte

R=[1]
for x in R:print x;R+=x+1,1

Hãy thử nó trực tuyến!

Đoạn này dài hơn, nhưng nó khá tiện lợi, in chuỗi ABACABA .

9 xnor Nov 30 2020 at 23:38

Haskell , 17 byte

[[1..x]|x<-[1..]]

Hãy thử nó trực tuyến!

Vì thử thách dường như cho phép đầu ra không bằng phẳng, chúng tôi có thể chỉ cần tạo danh sách các danh sách [1],[1,2],[1,2,3,],..., theo đề xuất của @AZTECCO.

Haskell , 19 byte

l=1:do x<-l;[x+1,1]

Hãy thử nó trực tuyến!

Một danh sách phẳng vô hạn được xác định đệ quy với dãy ABACABA1,2,1,3,1,2,1,4,... ( A001511 ).

Một biến thể cùng độ dài:

l=(:[1]).succ=<<0:l

Hãy thử nó trực tuyến!

20 byte

l=do x<-[1..];[1..x]

Hãy thử nó trực tuyến!

Đếm ngược 1,1,2,1,2,3,1,2,3,4,..., nhưng như một danh sách phẳng.

7 DigitalTrauma Nov 30 2020 at 18:18

Bash + GNU Coreutils, 20

seq -fseq\ %g inf|sh

Hãy thử nó trực tuyến! - Hết thời gian sau 60 giây.

7 DigitalTrauma Nov 30 2020 at 18:29

sed 4.2.2 , 20

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

Hãy thử nó trực tuyến!

Đầu ra ở dạng đơn phân, theo sự đồng thuận meta này .

7 Mukundan314 Dec 01 2020 at 04:51

Bash , 20 byte

seq inf|xargs -l seq

Hãy thử nó trực tuyến!

6 DominicvanEssen Dec 01 2020 at 08:36

R , 21 byte

(cũng được xác định gần như đồng thời bởi Robin Ryder)

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

Hãy thử nó trực tuyến!

Tương tự như chuỗi ví dụ, nhưng mỗi chuỗi con được đảo ngược và giá trị ban đầu trong mỗi chuỗi con được biểu diễn bằng số 0 ban đầu ( 03ví dụ như 3).

Nếu bạn không thích các số 0 đầu tiên, hãy xem phiên bản trước bằng cách sử dụng show(bên dưới) hoặc câu trả lời của Giuseppe .


R , 23 22 byte

Chỉnh sửa: -1 byte cảm ơn Robin Ryder

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

Hãy thử nó trực tuyến!

Xuất ra chuỗi được sử dụng trong ví dụ, cộng với số lượng bản sao vô hạn bổ sung của số 1.
Mỗi số được phân tách bằng dấu cách " ", dòng mới cộng với dấu ngoặc " \n[" hoặc dấu ngoặc cộng với dấu cách " [ ".

2-byte golfier (tại thời điểm niêm yết, ít nhất ...) so với khác hai R câu trả lời ...

5 cairdcoinheringaahing Nov 30 2020 at 17:58

Thạch , 4 byte

‘RṄß

Hãy thử nó trực tuyến!

Tôi nghĩ rằng điều này xuất ra tất cả các số với số lần vô hạn, nhưng vì đó là một định dạng đầu ra khác nên tôi không chắc chắn 100%

Làm thế nào nó hoạt động

‘RṄß - Main link. Left argument is initially n = 0
‘    - Increment
 R   - Range
  Ṅ  - Print
   ß - Recursively run the main link

Đối với n = 0, ‘RṄkết quả đầu ra [1]. Sau đó chúng tôi đệ quy, sử dụng n = [1]. ‘RṄsau đó kết quả đầu ra [[1, 2]]và chúng tôi đệ quy lại lần nữa, sử dụng n = [[1, 2]], kết quả đầu ra nào, [[[1, 2], [1, 2, 3]]]v.v.

5 LuisMendo Nov 30 2020 at 19:28

Octave , 29 28 byte

do disp(fix(1/rand)) until 0

Hãy thử nó trực tuyến!

Điều này xuất ra một chuỗi \$(x_k)\$của các số tự nhiên ngẫu nhiên độc lập, phân bố giống nhau. Mỗi giá trị \$x_k\$được lấy bằng \$1/r\$làm tròn về 0, ở đâu \$r\$có phân bố đồng đều trên khoảng thời gian \$(0,1)\$.

Đối với một chỉ mục nhất định \$k\$và cho bất kỳ \$n \in \mathbb N\$, có một xác suất khác là \$x_k=n\$(bỏ qua sự không chính xác của dấu phẩy động). Do đó, với xác suất \$1\$mọi \$n\$xuất hiện thường xuyên vô hạn trong chuỗi \$(x_k)\$.

5 Giuseppe Nov 30 2020 at 23:06

R , 25 21 byte

repeat T=print(T:0+1)

Hãy thử nó trực tuyến!

Bản in 2..1, 3..1, 4..1, v.v.

Cảm ơn Robin Ryder vì -4 byte.

Điều này hoạt động vì printvô hình trả về đối số đầu tiên của nó.

5 PizgenalFilegav Dec 02 2020 at 03:18

Befunge , 5 byte

>1+?.

Hãy thử nó trực tuyến!

Ở mỗi đầu ra, có 50% khả năng số hiện tại sẽ được in và đặt lại thành 1, và 50% cơ hội 2sẽ được in và số hiện tại sẽ tăng theo một số lẻ ngẫu nhiên nào đó (theo phân phối hàm mũ). Điều này có thể xảy ra nhiều lần, vì vậy các số lẻ cũng có thể được xuất ra.

Mọi số tự nhiên đều có xác suất xuất hiện khác không, vì vậy cuối cùng nó sẽ được in ra vô số lần.

Giải trình

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

]:.1-:0`j
]:+!

Hãy thử nó trực tuyến!

Một giải pháp xác định, in từng phạm vi từ 1 đến ntheo thứ tự giảm dần.

Giải trình

]           # 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

truyền tải , 27 byte

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

Hãy thử nó trực tuyến!

Điều này đếm ngược từ các số liên tiếp.

4 J42161217 Nov 30 2020 at 18:20

Ngôn ngữ Wolfram (Mathematica) , 25 byte

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

Hãy thử nó trực tuyến!

-1 byte @att

3 UnrelatedString Nov 30 2020 at 18:40

Brachylog , 4 byte

⟦₁ẉ⊥

Hãy thử nó trực tuyến!

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

J , 13 byte

$:@,~[echo@#\

Hãy thử nó trực tuyến!

Kết quả đầu ra 1, 1 2, 1 2 3 4, 1 2 3 4 5 6 7 8, vv, với mỗi số trên một dòng riêng.

  • echo@#\Xuất ra độ dài tiền tố của danh sách hiện tại, tức là, 1..nvới n là độ dài danh sách hiện tại. Điều này được thực hiện như một tác dụng phụ.
  • $:@,~Nối danh sách với chính nó ,~và gọi hàm một cách đệ quy $:@.
3 Edgar Dec 01 2020 at 00:29

Rust , 54 byte

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

Thử trực tuyến

3 Sisyphus Dec 01 2020 at 00:59

Ruby , 17 byte

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

Hãy thử nó trực tuyến!

3 Neil Nov 30 2020 at 23:00

Than củi , 8 byte

W¹«I⊕ⅉD⸿

Hãy thử nó trực tuyến! Liên kết là phiên bản dài của mã. Hoạt động bằng cách in liên tục số tiếp theo vào canvas và sau đó đổ toàn bộ canvas.

2 byte cho một phiên bản in dấu \$ n \$số hạng thứ của một dãy:

IΣ

Hãy thử nó trực tuyến! Giải thích: Đơn giản chỉ cần in tổng số của đầu vào. Cho một số tự nhiên bất kỳ \$ n \$, tất cả các giá trị của biểu mẫu \$ \frac { 10 ^ n - 1 } 9 10 ^ m \$có tổng số là \$ n \$cho mọi \$ m \$, do đó mỗi số tự nhiên xuất hiện thường xuyên vô hạn.

3 Sisyphus Dec 01 2020 at 01:04

C (gcc) , 43 byte

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

Hãy thử nó trực tuyến!

3 NinaLisitsinskaya Dec 01 2020 at 05:42

JavaScript (V8) , 26 byte

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

Hãy thử nó trực tuyến!

Ký tự -được sử dụng làm dấu phân tách và đầu ra bắt đầu bằng ký tự đó, vì vậy tôi không thực sự chắc chắn liệu điều này có được chấp nhận hay không.

3 Noodle9 Nov 30 2020 at 18:26

C (gcc) , 52 49 44 byte

Đã tiết kiệm được 5 byte nhờ AZTECCO !!!

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

Hãy thử nó trực tuyến!

3 DMiddendorf Nov 30 2020 at 20:13

Java (JDK) , 61 byte

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

Hãy thử nó trực tuyến!

Chỉnh sửa: Cảm ơn @user đã bỏ bớt một vài byte và giúp tôi học được điều gì đó hôm nay! Xin chân thành cảm ơn @KevinCruijssen cho -2 byte.

3 AdamKatz Dec 03 2020 at 20:41

Bash, 21 byte

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

Chạy phiên bản 21B trên Dùng thử trực tuyến

Điều này xác định một hàm schạy seq NUMBERở nơi NUMBERbắt đầu 1và tăng dần theo mỗi lần chạy, sau đó nó tự chạy đệ quy. Sau khi định nghĩa, chúng tôi chạy s.

Đối với chi phí của 5B để chỉ định -s\ (dấu phân cách là một ký tự khoảng trắng), nó có thể được điều chỉnh thành một câu trả lời cho mỗi giải pháp dòng ở 26 byte:

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

Chạy phiên bản 26B trên Try It Online

3 roblogic Dec 01 2020 at 11:40

Zsh, 29 .. 19 byte

Giải pháp của @AdamKatz: Hãy thử trực tuyến!

for ((;++i;))seq $i

19 byte, cổng từ bash: s(){seq $[++n];s};s
25 byte (mỗi @AdamKatz): for ((;++i;))echo {1..$i}
25 byte : for ((;;i++))shuf -i 1-$i
26 byte (mỗi @AdamKatz): for ((;;))echo {1..$[++i]}
29 byte : for ((i=1;;))echo {1..$[i++]}
Tôi đã cố gắng sử dụng /dev/randomcho một giải pháp thay thế nhưng thật là hỗn độn!

3 Xcali Nov 30 2020 at 19:51

Perl 5 , 22 20 byte

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

Hãy thử nó trực tuyến!

2 Noodle9 Nov 30 2020 at 21:38

AWK , 34 byte

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

Hãy thử nó trực tuyến!

2 user Nov 30 2020 at 18:18

APL (Dyalog Unicode) , 12 11 byte (SBCS)

Đã lưu 1 byte nhờ @ovs

{∇1+⍴⎕←⍳⍵}1

Hãy thử nó trực tuyến!

Điều này cũng sử dụng trình tự từ câu hỏi.