Sonsuz sayıda ℕ

Nov 30 2020

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:

  1. Her sayı, (sonlu) miktarda görünür, boşluk veya rakam olmayan yeni satır karakterleriyle ayrılmalıdır.
  2. Program sona eremez (tüm sayıları bir şekilde yazmadıysanız).
  3. 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

23 Lyxal Nov 30 2020 at 21:03

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.

17 cairdcoinheringaahing Nov 30 2020 at 18:18

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], ...]
15 ovs Nov 30 2020 at 18:14

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

13 RobinRyder Nov 30 2020 at 18:59

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

10 xnor Dec 01 2020 at 07:26

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 .

9 xnor Nov 30 2020 at 23:38

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.

7 DigitalTrauma Nov 30 2020 at 18:18

Bash + GNU Coreutils, 20

seq -fseq\ %g inf|sh

Çevrimiçi deneyin! - 60 saniye sonra zaman aşımına uğrar.

7 DigitalTrauma Nov 30 2020 at 18:29

sed 4.2.2 , 20

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

Çevrimiçi deneyin!

Bu meta konsensusa göre çıktı teklidir .

7 Mukundan314 Dec 01 2020 at 04:51

Bash , 20 bayt

seq inf|xargs -l seq

Çevrimiçi deneyin!

6 DominicvanEssen Dec 01 2020 at 08:36

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

5 cairdcoinheringaahing Nov 30 2020 at 17:58

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.

5 LuisMendo Nov 30 2020 at 19:28

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)\$.

5 Giuseppe Nov 30 2020 at 23:06

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.

5 PizgenalFilegav Dec 02 2020 at 03:18

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.
4 WheatWizard Dec 17 2020 at 23:21

taşıma , 27 bayt

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

Çevrimiçi deneyin!

Bu, ardışık sayılardan geriye doğru sayılır.

4 J42161217 Nov 30 2020 at 18:20

Wolfram Dili (Mathematica) , 25 bayt

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

Çevrimiçi deneyin!

-1 bayt @att

3 UnrelatedString Nov 30 2020 at 18:40

Brachylog , 4 bayt

⟦₁ẉ⊥

Çevrimiçi deneyin!

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

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, yani 1..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 $:@.
3 Edgar Dec 01 2020 at 00:29

Pas , 54 bayt

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

Çevrimiçi deneyin

3 Sisyphus Dec 01 2020 at 00:59

Ruby , 17 bayt

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

Çevrimiçi deneyin!

3 Neil Nov 30 2020 at 23:00

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.

3 Sisyphus Dec 01 2020 at 01:04

C (gcc) , 43 bayt

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

Çevrimiçi deneyin!

3 NinaLisitsinskaya Dec 01 2020 at 05:42

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.

3 Noodle9 Nov 30 2020 at 18:26

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!

3 DMiddendorf Nov 30 2020 at 20:13

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.

3 AdamKatz Dec 03 2020 at 20:41

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

3 roblogic Dec 01 2020 at 11:40

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!

3 Xcali Nov 30 2020 at 19:51

Perl 5 , 22 20 bayt

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

Çevrimiçi deneyin!

2 Noodle9 Nov 30 2020 at 21:38

AWK , 34 bayt

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

Çevrimiçi deneyin!

2 user Nov 30 2020 at 18:18

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.