Sonsuz sayıda ℕ
Arka fon:
Sonsuz doğallardan oluşan bir dizi, her doğal sayıyı sonsuz sayıda içeren bir dizidir.
Açıklığa kavuşturmak için, her numara birden çok kez basılmalıdır!
Meydan okuma:
En kısa kodu içeren bir sonsuz doğal dizi çıktılar.
Kurallar:
- Her sayı, (sonlu) miktarda görünür, boşluk veya rakam olmayan yeni satır karakterleriyle ayrılmalıdır.
- Program sona eremez (tüm sayıları bir şekilde yazmadıysanız).
- Böyle bir sekans yazmanın herhangi bir yolu kabul edilebilir.
Örnekler:
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...
Tüm N ∈ ℕ için 1'den N'ye kadar tüm doğalları yazdığımıza dikkat edin.
Soruyla ilgili geri bildirim ve düzenlemeler memnuniyetle karşılanır. Calculus sınavımdan esinlenildi.
Yanıtlar
Scratch 3.0 , 13 20 blok / 121 70 bayt
SB Sözdizimi olarak:
define(n)(i
say(i
((n)+<(i)=(n)>)((1)+((i)*<(i)<(n
Bu, sıradaki her terimi söylüyor. Numaraların hızlı bir şekilde tetiklenmemesi için bir gecikme eklenebilir.
Hiç bu kadar istismar edilmiş çizik görmemiştim. Boş ad işlevini boş parametrelerle çağırırsınız . Tanrım. Bayt tasarrufu sağlayan şey!
@Att'e -51 teşekkürler
Scratch'te deneyin
Açıklama yakında geliyor.
Kabuk , 2 bayt
ḣN
Çevrimiçi deneyin!
İlk suratsız yanıtı! Ayrıca sorudaki sırayı kullanır
Nasıl çalışır
ḣN - Main program
N - The infinite list [1, 2, 3, ...]
ḣ - Prefixes; [[1], [1, 2], [1, 2, 3], ...]
05AB1E , 2 bayt
∞L
Çevrimiçi deneyin! Altbilgi, çıktıyı gönderideki örnek gibi biçimlendirir.
∞tüm doğal sayıların bir listesini iter, her sayı Liçin aralığı alır [1 .. n].
R , 26 25 24 bayt
Dominic van Essen'e -1 bayt teşekkürler
repeat cat(rpois(9,9)+1)
Çevrimiçi deneyin!
Rastgele sonsuz bir tamsayı dizisi çıkarır ve \$Poisson(9)\$dağıtım (0'ların çıktısını önlemek için +1). Daha fazla "verimlilik" için, bir seferde 9'luk gruplar halinde çıktılar. Ortalamanın herhangi bir pozitif değeri işe yarayacaktır; ortalama 9 kullanmak 1 karakterlik sayılar için varyansı en üst düzeye çıkarır.
Tüm sayılar, herhangi bir tam sayı için olduğu gibi sonsuz sıklıkta görünür \$k\$, beklenen oluşum sayısı \$k\$ilk \$n\$gerçekleştirmeler \$\infty\$olarak \$n\to\infty\$:
$$E\left[\sum_{i=1}^n\mathbb{I}_{X_i=k}\right]\xrightarrow[n\to\infty]{}\infty.$$
cat9'luk bir grup içindeki tamsayıların boşluklarla ayrıldığı, ancak gruplar arasında ayırıcı olmadığı anlamına gelen çağrılar . Çıktıdaki 3 ve 4 basamaklı sayıların büyük çoğunluğu bu artefakttan kaynaklanmaktadır, ancak bu tür sayıların (ve daha büyük sayıların) sonunda çıkacağına dair teorik bir garanti vardır, en azından temeldeki rastgele sayı üretecinin olduğunu varsayarsak mükemmel.
Daha büyük bir varyans için, Giuseppe'nin aynı bayt sayısı için önerisini takip edebiliriz:
repeat cat(1%/%runif(9))
Çevrimiçi deneyin!
Bu, daha fazla 1s ve daha büyük sayılara neden olur ( cateser sayesinde bazı çok büyük sayılar dahil ). Yine, herhangi bir tamsayının oluşum sayısı, çıktının boyutu sonsuza gittiğinde sonsuza gider.
Diğer iki R yanıtı deterministik yöntemler kullanılarak daha kısa çıkar: Giuseppe ve Dominic van Essen'in
Python 2 , 31 bayt
R=1,
while 1:print R;R+=len(R),
Çevrimiçi deneyin!
@Danis'e burada bir bayt kaydettiği için teşekkürler R+=R[-1]+1,. Bu
Baskılar:
(1,)
(1, 1)
(1, 1, 2)
(1, 1, 2, 3)
(1, 1, 2, 3, 4)
(1, 1, 2, 3, 4, 5)
...
Son eleman artı bir her eklendiğinde 1'den n'ye kadar (1'in iki kez görünmesi dışında) bir sayı listesi toplar.
32 bayt
R=[1]
for x in R:print R;R+=x+1,
Çevrimiçi deneyin!
Python 2 , 30 bayt (varsayılan)
n=2
while 1:print~-2**n%n;n+=1
Çevrimiçi deneyin!
\ Dizisi$2^n \bmod n\$( A015910 ) 'un tüm değerleri alacağı varsayılır \$k \geq 0\$hariç \$k=1\$. Her bir değerin sonsuz sayıda göründüğünün de varsayıldığını bilmiyorum, ancak belirli değerler için bilinen çözümlerle tutarlı görünüyor .
Bunun yerine hesaplıyoruz \$(2^n-1) \bmod n\$, bu da \$0\$yerine \$1\$ tek eksik değer olabilir (varsayım geçerliyse).
Çıktıya baktığınızda şunu düşünebilirsiniz \$2\$hiçbir zaman çıktı değildir, ancak aslında \ için önce görünür$n=4700063497\$ve A050259'da giderek daha yüksek değerler için .
Python 2 , 33 bayt
R=[1]
for x in R:print x;R+=x+1,1
Çevrimiçi deneyin!
Bu daha uzun, ancak oldukça şık, ABACABA dizisini yazdırmak .
Haskell , 17 bayt
[[1..x]|x<-[1..]]
Çevrimiçi deneyin!
[1],[1,2],[1,2,3,],...Zorluk düz olmayan çıktıya izin veriyor gibi göründüğünden , @AZTECCO'nun önerdiği gibi , listelerin bir listesini kolayca oluşturabiliriz .
Haskell , 19 bayt
l=1:do x<-l;[x+1,1]
Çevrimiçi deneyin!
ABACABA dizisi 1,2,1,3,1,2,1,4,... ( A001511 ) ile yinelemeli olarak tanımlanmış sonsuz düz liste .
Aynı uzunlukta bir varyant:
l=(:[1]).succ=<<0:l
Çevrimiçi deneyin!
20 bayt
l=do x<-[1..];[1..x]
Çevrimiçi deneyin!
Sayıyor 1,1,2,1,2,3,1,2,3,4,..., ancak düz bir liste olarak.
Bash + GNU Coreutils, 20
seq -fseq\ %g inf|sh
Çevrimiçi deneyin! - 60 saniye sonra zaman aşımına uğrar.
sed 4.2.2 , 20
:;s/(1*).*/1\1 &/p;b
Çevrimiçi deneyin!
Bu meta konsensusa göre çıktı teklidir .
Bash , 20 bayt
seq inf|xargs -l seq
Çevrimiçi deneyin!
R , 21 bayt
(ayrıca neredeyse eş zamanlı olarak Robin Ryder tarafından tanımlanır)
while(T<-T+1)cat(T:0)
Çevrimiçi deneyin!
Örnek diziye benzer, ancak her alt dizi tersine çevrilir ve her alt dizideki ilk değer, bir ilk sıfır ile temsil edilir (yani, 03örneğin 3 için).
İlk sıfırları beğenmezseniz, show(aşağıda) kullanarak önceki sürüme veya Giuseppe'nin cevabına bakın .
R , 23 22 bayt
Düzenleme: Robin Ryder sayesinde -1 bayt
while(T<-T+1)show(1:T)
Çevrimiçi deneyin!
Örnekte kullanılan dizinin yanı sıra sayının ek sonsuz sayıda kopyasını çıkarır 1.
Her numara bir boşluk " ", bir satırsonu artı köşeli ayraç " \n[" veya bir köşeli ayraç artı boşluk " [ " ile ayrılır .
Diğer iki R cevabından 2 baytlık golfçü (en azından gönderim anında ...)
Jöle , 4 bayt
‘RṄß
Çevrimiçi deneyin!
Sanırım bu, tüm sayıları sonsuz sayıda çıktı, ancak farklı bir çıktı biçimi olduğu için% 100 emin değilim
Nasıl çalışır
‘RṄß - Main link. Left argument is initially n = 0
‘ - Increment
R - Range
Ṅ - Print
ß - Recursively run the main link
İçin n = 0, ‘RṄçıkışlar [1]. Daha sonra kullanarak tekrar ederiz n = [1]. ‘RṄsonra çıktılar [[1, 2]]ve tekrar tekrar, kullanarak n = [[1, 2]], hangi çıktılar [[[1, 2], [1, 2, 3]]]vb.
Oktav , 29 28 bayt
do disp(fix(1/rand)) until 0
Çevrimiçi deneyin!
Bu bir dizi çıkarır \$(x_k)\$bağımsız, aynı şekilde dağıtılmış rastgele doğal sayılar. Her değer \$x_k\$\ olarak elde edilir$1/r\$sıfıra yuvarlanır, burada \$r\$aralık üzerinde düzgün bir dağılıma sahiptir \$(0,1)\$.
Belirli bir dizin için \$k\$ve herhangi bir \$n \in \mathbb N\$sıfır olmayan bir olasılık var \$x_k=n\$(kayan nokta yanlışlıkları göz ardı edilerek). Bu nedenle olasılıkla \$1\$her \$n\$dizide sonsuz sıklıkta görünür \$(x_k)\$.
R , 25 21 bayt
repeat T=print(T:0+1)
Çevrimiçi deneyin!
Baskılar 2..1, 3..1, 4..1vb.
-4 bayt için Robin Ryder'a teşekkürler.
Bu işe printyarar çünkü görünmez bir şekilde ilk argümanını döndürür.
Befunge , 5 bayt
>1+?.
Çevrimiçi deneyin!
Her çıktıda, mevcut sayının yazdırılıp 1'e sıfırlanma şansı% 50'dir ve% 50 olasılıkla 2yazdırılır ve mevcut sayı rastgele bir tek sayı ile artar (üstel bir dağılımın ardından). Bu birden çok kez olabilir, böylece tek sayılar da çıkarılabilir.
Her doğal sayının oluşma olasılığı sıfırdan farklıdır, bu nedenle sonunda sonsuz sayıda basılacaktır.
Açıklama
>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 bayt
]:.1-:0`j
]:+!
Çevrimiçi deneyin!
Her aralığı 1'den nazalan sırada yazdıran belirleyici bir çözüm .
Açıklama
] # 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.
taşıma , 27 bayt
>v
1","@"}
^+^<#-1
1+<<<
Çevrimiçi deneyin!
Bu, ardışık sayılardan geriye doğru sayılır.
Wolfram Dili (Mathematica) , 25 bayt
Do[Print@n,{m,∞},{n,m}]
Çevrimiçi deneyin!
-1 bayt @att
Brachylog , 4 bayt
⟦₁ẉ⊥
Çevrimiçi deneyin!
ẉ Print with a newline
⟦₁ the range from 1 to something,
⊥ then try again.
J , 13 bayt
$:@,~[echo@#\
Çevrimiçi deneyin!
Çıkışlar 1, 1 2, 1 2 3 4, 1 2 3 4 5 6 7 8, vb kendi satırında her sayı ile.
echo@#\Geçerli listenin önek uzunluklarının çıktısını alın, yani1..nburada n geçerli liste uzunluğudur. Bu bir yan etki olarak yapılır.$:@,~Listeyi kendisine ekleyin ve,~işlevi yinelemeli olarak çağırın$:@.
Pas , 54 bayt
(2..).for_each(|x|(1..x).for_each(|y|print!("{} ",y)))
Çevrimiçi deneyin
Ruby , 17 bayt
loop{p *1..$.+=1}
Çevrimiçi deneyin!
Kömür , 8 bayt
W¹«I⊕ⅉD⸿
Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı sürümüne yöneliktir. Bir sonraki sayıyı art arda tuvale yazdırarak ve ardından tüm tuvali atarak çalışır.
\ Yazdıran bir sürüm için 2 bayt$ n \$bir dizinin inci terimi:
IΣ
Çevrimiçi deneyin! Açıklama: Girişin dijital toplamını yazdırır. Herhangi bir doğal sayı verildiğinde \$ n \$, formun tüm değerleri \$ \frac { 10 ^ n - 1 } 9 10 ^ m \$dijital toplamı var \$ n \$her \ için$ m \$, böylece her doğal sayı sonsuz sıklıkta görünür.
C (gcc) , 43 bayt
i;main(j){for(;;)printf("%d ",j=--j?:++i);}
Çevrimiçi deneyin!
JavaScript (V8) , 26 bayt
for(a=b='';;)write(a+=--b)
Çevrimiçi deneyin!
-Ayırıcı olarak kullanılan karakter ve çıktı onunla başlar, bu yüzden bunun kabul edilebilir olup olmadığından pek emin değilim.
C (gcc) , 52 49 44 bayt
AZTECCO sayesinde 5 bayt tasarruf sağladı !!!
f(i,j){for(j=1;printf("%d ",j--);)j=j?:++i;}
Çevrimiçi deneyin!
Java (JDK) , 61 bayt
v->{for(int i,j=2;;j++)for(i=0;++i<j;)System.out.println(i);}
Çevrimiçi deneyin!
Düzenleme: Birkaç baytı azalttığınız ve bugün bir şeyler öğrenmeme yardımcı olduğunuz için @ user'a teşekkürler! -2 bayt için @ KevinCruijssen'e çok teşekkürler.
Bash, 21 bayt
s(){ seq $[++n];s;};s
1
1
2
1
2
3
…
Çevrimiçi Dene'de 21B sürümünü çalıştırın
Bu işlev tanımlar sbu çalışır başlamakta her çalışmaya ve artışlar, o zaman kendisini özyinelemeli olarak çalışır. Tanımdan sonra koşuyoruz .seq NUMBERNUMBER1s
5B maliyetinin belirtilmesi için -s\ (ayırıcı bir boşluk karakteridir), 26 baytta her satır çözümü için tek bir yanıta uyarlanabilir :
s(){ seq -s\ $[++n];s;};s
1
1 2
1 2 3
…
26B sürümünü Çevrimiçi Dene'de çalıştırın
Zsh, 29 .. 19 bayt
@AdamKatz'ın Çözümü: Çevrimiçi Deneyin!
for ((;++i;))seq $i
19 bayt, s(){seq $[++n];s};s
bash'den bağlantı noktası: 25 bayt (@AdamKatz başına): for ((;++i;))echo {1..$i}
25 bayt : for ((;;i++))shuf -i 1-$i
26 bayt (@AdamKatz başına): for ((;;))echo {1..$[++i]}
29 bayt : for ((i=1;;))echo {1..$[i++]}
Bir alternatif olarak kullanmayı denedim /dev/randomama bir karmaşa oldu!
Perl 5 , 22 20 bayt
say while$_.=++$i.$"
Çevrimiçi deneyin!
AWK , 34 bayt
{for(;;++i)for(j=0;j++<i;)print j}
Çevrimiçi deneyin!
APL (Dyalog Unicode) , 12 11 bayt (SBCS)
@Ovs sayesinde 1 bayt kaydedildi
{∇1+⍴⎕←⍳⍵}1
Çevrimiçi deneyin!
Bu aynı zamanda sorudaki sırayı da kullanır.