มากมายเพียบℕ
พื้นหลัง:
ลำดับของธรรมชาติที่ไม่มีที่สิ้นสุดคือลำดับที่มีจำนวนธรรมชาติทุกจำนวนไม่ จำกัด หลาย ๆ ครั้ง
เพื่อความชัดเจนทุกหมายเลขต้องพิมพ์หลายครั้ง!
ความท้าทาย:
เอาท์พุตลำดับของธรรมชาติที่ไม่มีที่สิ้นสุดด้วยรหัสที่สั้นที่สุด
กฎ:
- แต่ละหมายเลขต้องคั่นด้วยจำนวน (จำกัด ) ของช่องว่างที่มองเห็นได้ช่องว่างหรืออักขระบรรทัดใหม่ที่ไม่ใช่ตัวเลข
- โปรแกรมไม่สามารถยุติได้ (เว้นแต่คุณจะเขียนตัวเลขทั้งหมด)
- วิธีใดก็ตามในการเขียนลำดับดังกล่าวเป็นที่ยอมรับ
ตัวอย่าง:
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...
สังเกตว่าเราเขียน naturals ทั้งหมดตั้งแต่ 1 ถึง N สำหรับ N ∈ℕทั้งหมด
ยินดีรับข้อเสนอแนะและการแก้ไขคำถาม แรงบันดาลใจจากการสอบแคลคูลัสของฉัน
คำตอบ
Scratch 3.0 , 13 20 บล็อก / 121 70 ไบต์
เป็นไวยากรณ์ SB:
define(n)(i
say(i
((n)+<(i)=(n)>)((1)+((i)*<(i)<(n
สิ่งนี้กล่าวถึงแต่ละคำในลำดับ สามารถเพิ่มการหน่วงเวลาเพื่อไม่ให้ตัวเลขเริ่มทำงานอย่างรวดเร็ว
ฉันไม่เคยเห็นเกาถูกทารุณกรรมขนาดนี้ คุณเรียกชื่อที่ว่างเปล่าฟังก์ชั่นที่มีพารามิเตอร์ที่ว่างเปล่า ความดีของฉัน. อะไรก็ตามที่ประหยัดไบต์!
-51 ขอบคุณ @att
ลองใช้กับ Scratch
คำอธิบายเร็ว ๆ นี้
แกลบ 2 ไบต์
ḣN
ลองออนไลน์!
คำตอบแรก Husk! ยังใช้ลำดับในคำถาม
มันทำงานอย่างไร
ḣ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 ไบต์
-1 ไบต์ขอบคุณ Dominic van Essen
repeat cat(rpois(9,9)+1)
ลองออนไลน์!
แสดงลำดับเลขจำนวนเต็มแบบสุ่มแบบสุ่มซึ่งดึงมาจาก\$Poisson(9)\$การกระจาย (+1 เพื่อหลีกเลี่ยงการแสดงผล 0s) มีการส่งออกเป็นชุดครั้งละ 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และจำนวนมากขึ้น (รวมถึงตัวเลขที่ใหญ่มากด้วยcatสิ่งประดิษฐ์) อีกครั้งจำนวนครั้งที่เกิดขึ้นของจำนวนเต็มใด ๆ จะไปที่อินฟินิตี้เมื่อขนาดของเอาต์พุตไปที่อินฟินิตี้
คำตอบ R อื่น ๆ อีกสองคำตอบสั้นกว่าโดยใช้วิธีการกำหนด: Giuseppe'sและDominic van Essen's
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
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,...แต่เป็นรายการแบน
Bash + GNU Coreutils, 20
seq -fseq\ %g inf|sh
ลองออนไลน์! - หมดเวลาหลังจาก 60 วินาที
ข้อ 4.2.2 , 20
:;s/(1*).*/1\1 &/p;b
ลองออนไลน์!
เอาต์พุตเป็นเอกภาพตามความเห็นพ้องของเมตานี้
ทุบตี 20 ไบต์
seq inf|xargs -l seq
ลองออนไลน์!
R , 21 ไบต์
(ยังระบุใกล้เคียงกันโดย Robin Ryder)
while(T<-T+1)cat(T:0)
ลองออนไลน์!
คล้ายกับลำดับตัวอย่าง แต่แต่ละชุดย่อยจะกลับรายการและค่าเริ่มต้นในแต่ละชุดย่อยจะแสดงด้วยศูนย์เริ่มต้น (ดังนั้น03สำหรับ 3 เช่น)
ถ้าคุณทำไม่ได้เช่นศูนย์เริ่มต้นแล้วมองไปที่รุ่นก่อนหน้าโดยใช้show(ด้านล่าง) หรือที่คำตอบของจูเซปเป้
R , 23 22 ไบต์
แก้ไข: -1 ไบต์ขอบคุณ Robin Ryder
while(T<-T+1)show(1:T)
ลองออนไลน์!
1ขาออกลำดับที่ใช้ในตัวอย่างบวกจำนวนอนันต์เพิ่มเติมสำเนาของจำนวน
แต่ละหมายเลขจะคั่นด้วยช่องว่าง " ", วงเล็บปีกกาขึ้นบรรทัดใหม่ " \n[" หรือวงเล็บเหลี่ยมบวกช่องว่าง " [ "
2 ไบต์ golfier (ในขณะที่การโพสต์อย่างน้อย ... ) กว่าอื่น ๆ สอง Rคำตอบ ...
เยลลี่ 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]]]เป็นต้น
Octave , 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)\$.
R , 25 21 ไบต์
repeat T=print(T:0+1)
ลองออนไลน์!
พิมพ์2..1, 3..1, 4..1และอื่น ๆ
ขอบคุณ Robin Ryder สำหรับ -4 ไบต์
สิ่งนี้ได้ผลเนื่องจากprintส่งคืนอาร์กิวเมนต์แรกสุดมองไม่เห็น
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.
ถ่ายทอด 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 คือความยาวของรายการปัจจุบัน นี่เป็นผลข้างเคียง$:@,~ท้ายรายการเพื่อตัวเองและเรียกใช้ฟังก์ชันซ้ำ,~$:@
สนิม 54 ไบต์
(2..).for_each(|x|(1..x).for_each(|y|print!("{} ",y)))
ลองออนไลน์
ทับทิม 17 ไบต์
loop{p *1..$.+=1}
ลองออนไลน์!
ถ่าน 8 ไบต์
W¹«I⊕ⅉD⸿
ลองออนไลน์! ลิงก์คือรหัสเวอร์ชันที่ละเอียด ทำงานโดยการพิมพ์หมายเลขถัดไปซ้ำ ๆ ลงบนผืนผ้าใบจากนั้นทิ้งทั้งผืนผ้าใบ
2 ไบต์สำหรับเวอร์ชันที่พิมพ์\$ n \$คำศัพท์ลำดับ:
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 ไบต์
บันทึก 5 ไบต์ขอบคุณAZTECCO !!!
f(i,j){for(j=1;printf("%d ",j--);)j=j?:++i;}
ลองออนไลน์!
Java (JDK) , 61 ไบต์
v->{for(int i,j=2;;j++)for(i=0;++i<j;)System.out.println(i);}
ลองออนไลน์!
แก้ไข: ขอบคุณ @user สำหรับการโกนออกไม่กี่ไบต์และช่วยให้ฉันเรียนรู้บางสิ่งในวันนี้! ขอบคุณมากที่ @KevinCruijssen สำหรับ -2 ไบต์
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 บน Try It Online
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)
บันทึก 1 ไบต์ขอบคุณ@ovs
{∇1+⍴⎕←⍳⍵}1
ลองออนไลน์!
อันนี้ใช้ลำดับจากคำถามด้วย