Unendlich viele ℕ

Nov 30 2020

Hintergrund:

Eine Folge von unendlichen Naturtönen ist eine Folge, die jede natürliche Zahl unendlich oft enthält.

Zur Verdeutlichung muss jede Nummer mehrfach gedruckt werden!

Die Herausforderung:

Geben Sie eine Folge von unendlichen Naturtönen mit dem kürzesten Code aus.

Regeln:

  1. Jede Zahl muss durch eine (endliche) Anzahl von sichtbaren Leerzeichen, Leerzeichen oder neuen Zeilenzeichen getrennt werden, die keine Ziffer sind.
  2. Das Programm kann nicht beendet werden (es sei denn, Sie haben irgendwie alle Zahlen geschrieben).
  3. Jede Art, eine solche Sequenz zu schreiben, ist akzeptabel.

Beispiele:

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

Beachten Sie, dass wir alle Naturtöne von 1 bis N für alle N ∈ ∈ schreiben.

Feedback und Änderungen an der Frage sind willkommen. Inspiriert von meiner Calculus-Prüfung.

Antworten

23 Lyxal Nov 30 2020 at 21:03

Scratch 3.0 , 13 20 Blöcke / 121 70 Bytes

Als SB-Syntax:

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

Dies sagt jeder Begriff in der Sequenz. Eine Verzögerung kann hinzugefügt werden, damit die Zahlen nicht schnell ausgelöst werden.

Ich habe noch nie einen so missbrauchten Kratzer gesehen. Sie rufen die Funktion für leere Namen mit leeren Parametern auf . Meine Güte. Was auch immer Bytes spart!

-51 danke an @att

Probieren Sie es bei Scratch aus

Erklärung kommt bald.

17 cairdcoinheringaahing Nov 30 2020 at 18:18

Schale , 2 Bytes

ḣN

Probieren Sie es online aus!

Erste Husk Antwort! Verwendet auch die Reihenfolge in der Frage

Wie es funktioniert

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

∞L

Probieren Sie es online aus! Die Fußzeile formatiert die Ausgabe wie im Beispiel aus dem Beitrag.

schiebt eine Liste aller natürlichen Zahlen, Lnimmt den Bereich [1 .. n]für jede Zahl.

13 RobinRyder Nov 30 2020 at 18:59

R , 26 25 24 Bytes

-1 Byte dank Dominic van Essen

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

Probieren Sie es online aus!

Gibt eine zufällige unendliche Folge von ganzen Zahlen aus, die aus dem \ gezogen werden$Poisson(9)\$Verteilung (+1, um die Ausgabe von Nullen zu vermeiden). Sie werden in Chargen von jeweils 9 Stück ausgegeben, um mehr "Effizienz" zu erzielen. Jeder positive Wert des Mittelwerts würde funktionieren; Die Verwendung eines Mittelwerts von 9 maximiert die Varianz für 1-stellige Zahlen.

Alle Zahlen erscheinen unendlich oft in dem Sinne, dass für jede ganze Zahl \$k\$, die erwartete Anzahl von Vorkommen von \$k\$im ersten \$n\$Realisierungen gehen an \$\infty\$as \$n\to\infty\$::

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

Die Aufrufe catbedeuten, dass die Ganzzahlen innerhalb eines 9er-Stapels durch Leerzeichen getrennt sind, es jedoch kein Trennzeichen zwischen den Stapeln gibt. Die überwiegende Mehrheit der 3- und 4-stelligen Zahlen in der Ausgabe ist auf dieses Artefakt zurückzuführen, aber es gibt eine theoretische Garantie dafür, dass solche Zahlen (und größere Zahlen) schließlich ausgegeben werden, zumindest wenn wir davon ausgehen, dass der zugrunde liegende Zufallszahlengenerator ist perfekt.


Für eine größere Varianz können wir Giuseppes Vorschlag für dieselbe Byteanzahl folgen:

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

Probieren Sie es online aus!

Dies führt zu immer mehr 1s (einschließlich einiger sehr großer Zahlen dank des catArtefakts). Wiederum geht die Anzahl der Vorkommen einer ganzen Zahl auf unendlich, wenn die Größe der Ausgabe auf unendlich geht.


Zwei weitere R-Antworten kommen mit deterministischen Methoden kürzer heraus: die von Giuseppe und Dominic van Essen

10 xnor Dec 01 2020 at 07:26

Python 2 , 31 Bytes

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

Probieren Sie es online aus!

Vielen Dank an @Danis für das Speichern eines Bytes hier R+=R[-1]+1,. Diese

Drucke:

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

Sammelt jedes Mal eine Liste mit Zahlen von 1 bis n (außer 1 erscheint zweimal), wenn das letzte Element plus eins angehängt wird.

32 Bytes

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

Probieren Sie es online aus!


Python 2 , 30 Bytes (vermutet)

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

Probieren Sie es online aus!

Die Reihenfolge von \$2^n \bmod n\$( A015910 ) wird vermutet, alle Werte anzunehmen \$k \geq 0\$außer \$k=1\$. Ich weiß nicht, ob auch vermutet wird, dass jeder Wert unendlich oft vorkommt, aber er scheint mit bekannten Lösungen für bestimmte Werte übereinzustimmen .

Wir berechnen stattdessen \$(2^n-1) \bmod n\$, was macht \$0\$eher als \$1\$ sei der einzige fehlende Wert (wenn die Vermutung gilt).

Wenn Sie sich die Ausgabe ansehen, denken Sie vielleicht, dass \$2\$wird nie ausgegeben, aber es erscheint tatsächlich zuerst für \$n=4700063497\$und für zunehmend höhere Werte in A050259 .


Python 2 , 33 Bytes

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

Probieren Sie es online aus!

Dies ist länger, aber es ist ziemlich geschickt, die ABACABA-Sequenz zu drucken .

9 xnor Nov 30 2020 at 23:38

Haskell , 17 Bytes

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

Probieren Sie es online aus!

Da die Herausforderung eine nicht flache Ausgabe zu ermöglichen scheint, können wir einfach eine Liste der Listen [1],[1,2],[1,2,3,],...erstellen, wie von @AZTECCO vorgeschlagen.

Haskell , 19 Bytes

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

Probieren Sie es online aus!

Eine rekursiv definierte unendliche flache Liste mit der ABACABA-Sequenz 1,2,1,3,1,2,1,4,... ( A001511 ).

Eine gleichlange Variante:

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

Probieren Sie es online aus!

20 Bytes

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

Probieren Sie es online aus!

Aufzählen 1,1,2,1,2,3,1,2,3,4,..., aber als flache Liste.

7 DigitalTrauma Nov 30 2020 at 18:18

Bash + GNU Coreutils, 20

seq -fseq\ %g inf|sh

Probieren Sie es online aus! - Zeitüberschreitung nach 60 Sekunden.

7 DigitalTrauma Nov 30 2020 at 18:29

sed 4.2.2 , 20

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

Probieren Sie es online aus!

Die Ausgabe ist gemäß diesem Metakonsens unär .

7 Mukundan314 Dec 01 2020 at 04:51

Bash , 20 Bytes

seq inf|xargs -l seq

Probieren Sie es online aus!

6 DominicvanEssen Dec 01 2020 at 08:36

R , 21 Bytes

(auch nahezu gleichzeitig von Robin Ryder identifiziert)

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

Probieren Sie es online aus!

Ähnlich wie in der Beispielsequenz, jedoch wird jede Unterserie umgekehrt, und der Anfangswert in jeder Unterreihe wird mit einer anfänglichen Null dargestellt ( 03z. B. für 3).

Wenn Ihnen die anfänglichen Nullen nicht gefallen, schauen Sie sich die vorherige Version mit show(unten) oder die Antwort von Giuseppe an .


R , 23 22 Bytes

Edit: -1 Byte dank Robin Ryder

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

Probieren Sie es online aus!

Gibt die im Beispiel verwendete Sequenz sowie eine zusätzliche unendliche Anzahl von Kopien der Nummer aus 1.
Jede Zahl wird entweder durch ein Leerzeichen " ", eine neue Zeile plus Klammer " \n[" oder eine Klammer plus Leerzeichen " [ " getrennt.

2 Bytes Golf (mindestens zum Zeitpunkt der Veröffentlichung ...) als die beiden anderen R- Antworten ...

5 cairdcoinheringaahing Nov 30 2020 at 17:58

Gelee , 4 Bytes

‘RṄß

Probieren Sie es online aus!

Ich denke, dies gibt unendlich oft alle Zahlen aus, aber da es sich um ein anderes Ausgabeformat handelt, bin ich mir nicht 100% sicher

Wie es funktioniert

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

Für n = 0, ‘RṄAusgänge [1]. Wir rekursieren dann mit n = [1]. ‘RṄdann gibt es aus [[1, 2]], und wir rekursieren erneut, wobei wir verwenden n = [[1, 2]], welche Ausgaben [[[1, 2], [1, 2, 3]]]usw.

5 LuisMendo Nov 30 2020 at 19:28

Oktave , 29 28 Bytes

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

Probieren Sie es online aus!

Dies gibt eine Sequenz \ aus$(x_k)\$von unabhängigen, identisch verteilten natürlichen Zufallszahlen. Jeder Wert \$x_k\$wird erhalten als \$1/r\$gegen Null gerundet, wobei \$r\$hat eine gleichmäßige Verteilung auf das Intervall \$(0,1)\$.

Für einen bestimmten Index \$k\$und für jedes \$n \in \mathbb N\$gibt es eine Wahrscheinlichkeit ungleich Null, dass \$x_k=n\$(Ignorieren von Gleitkomma-Ungenauigkeiten). Daher mit Wahrscheinlichkeit \$1\$jeder \$n\$erscheint unendlich oft in der Sequenz \$(x_k)\$.

5 Giuseppe Nov 30 2020 at 23:06

R , 25 21 Bytes

repeat T=print(T:0+1)

Probieren Sie es online aus!

Drucke 2..1, 3..1, 4..1und so weiter.

Vielen Dank an Robin Ryder für -4 Bytes.

Dies funktioniert, weil printdas erste Argument unsichtbar zurückgegeben wird.

5 PizgenalFilegav Dec 02 2020 at 03:18

Befunge , 5 Bytes

>1+?.

Probieren Sie es online aus!

Bei jeder Ausgabe besteht eine 50% ige Chance, dass die aktuelle Zahl gedruckt und auf 1 zurückgesetzt wird, und eine 50% ige Chance, dass 2die aktuelle Zahl gedruckt wird und sich die aktuelle Zahl um eine zufällige ungerade Zahl erhöht (nach einer Exponentialverteilung). Dies kann mehrmals vorkommen, sodass auch ungerade Zahlen ausgegeben werden können.

Jede natürliche Zahl hat eine Wahrscheinlichkeit ungleich Null, so dass sie schließlich unendlich oft gedruckt wird.

Erläuterung

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

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

Probieren Sie es online aus!

Eine deterministische Lösung, bei der jeder Bereich von 1 bis nin absteigender Reihenfolge gedruckt wird.

Erläuterung

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

vermitteln , 27 Bytes

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

Probieren Sie es online aus!

Dies zählt von aufeinanderfolgenden Zahlen herunter.

4 J42161217 Nov 30 2020 at 18:20

Wolfram Language (Mathematica) , 25 Bytes

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

Probieren Sie es online aus!

-1 Byte @att

3 UnrelatedString Nov 30 2020 at 18:40

Brachylog , 4 Bytes

⟦₁ẉ⊥

Probieren Sie es online aus!

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

J , 13 Bytes

$:@,~[echo@#\

Probieren Sie es online aus!

Ausgänge 1, 1 2, 1 2 3 4, 1 2 3 4 5 6 7 8, usw, mit jeder Nummer in einer eigenen Zeile.

  • echo@#\Geben Sie die Präfixlängen der aktuellen Liste aus, dh 1..nwobei n die aktuelle Listenlänge ist. Dies geschieht als Nebeneffekt.
  • $:@,~Hängen Sie die Liste an sich selbst an ,~und rufen Sie die Funktion rekursiv auf $:@.
3 Edgar Dec 01 2020 at 00:29

Rost , 54 Bytes

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

Probieren Sie es online aus

3 Sisyphus Dec 01 2020 at 00:59

Ruby , 17 Bytes

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

Probieren Sie es online aus!

3 Neil Nov 30 2020 at 23:00

Holzkohle , 8 Bytes

W¹«I⊕ⅉD⸿

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Funktioniert, indem wiederholt die nächste Nummer auf die Leinwand gedruckt und dann die gesamte Leinwand ausgegeben wird.

2 Bytes für eine Version, die das \ druckt$ n \$th Term einer Sequenz:

IΣ

Probieren Sie es online aus! Erläuterung: Druckt einfach die digitale Summe der Eingabe. Bei jeder natürlichen Zahl \$ n \$, alle Werte des Formulars \$ \frac { 10 ^ n - 1 } 9 10 ^ m \$habe eine digitale Summe von \$ n \$für jeden \$ m \$somit erscheint jede natürliche Zahl unendlich oft.

3 Sisyphus Dec 01 2020 at 01:04

C (gcc) , 43 Bytes

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

Probieren Sie es online aus!

3 NinaLisitsinskaya Dec 01 2020 at 05:42

JavaScript (V8) , 26 Bytes

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

Probieren Sie es online aus!

-Als Trennzeichen verwendetes Zeichen und die Ausgabe beginnt damit, daher bin ich mir nicht sicher, ob dies akzeptabel ist.

3 Noodle9 Nov 30 2020 at 18:26

C (gcc) , 52 49 44 Bytes

5 Bytes dank AZTECCO gespart !!!

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

Probieren Sie es online aus!

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);}

Probieren Sie es online aus!

Edit: Danke @user, dass du ein paar Bytes rasiert und mir geholfen hast, heute etwas zu lernen! Vielen Dank an @KevinCruijssen für -2 Bytes.

3 AdamKatz Dec 03 2020 at 20:41

Bash, 21 Bytes

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

Führen Sie die 21B-Version auf Try It Online aus

Dies definiert eine Funktion s, die seq NUMBERdort ausgeführt wird , wo sie NUMBERbeginnt 1und mit jedem Lauf inkrementiert wird. Anschließend wird sie selbst rekursiv ausgeführt. Nach der Definition laufen wir s.

Für die Angabe der Kosten von 5B -s\ (Trennzeichen ist ein Leerzeichen) kann es an eine Lösung mit einer Antwort pro Zeile und 26 Byte angepasst werden :

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

Führen Sie die 26B-Version auf Try It Online aus

3 roblogic Dec 01 2020 at 11:40

Zsh, 29 .. 19 Bytes

Lösung von @AdamKatz: Probieren Sie es online aus!

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

19 Bytes, Port von Bash: s(){seq $[++n];s};s
25 Bytes (pro @AdamKatz): for ((;++i;))echo {1..$i}
25 Bytes : for ((;;i++))shuf -i 1-$i
26 Bytes (pro @AdamKatz): for ((;;))echo {1..$[++i]}
29 Bytes : for ((i=1;;))echo {1..$[i++]}
Ich habe versucht, /dev/randomeine Alternative zu verwenden, aber es war ein Chaos!

3 Xcali Nov 30 2020 at 19:51

Perl 5 , 22 20 Bytes

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

Probieren Sie es online aus!

2 Noodle9 Nov 30 2020 at 21:38

AWK , 34 Bytes

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

Probieren Sie es online aus!

2 user Nov 30 2020 at 18:18

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

1 Byte dank @ovs gespeichert

{∇1+⍴⎕←⍳⍵}1

Probieren Sie es online aus!

Dieser verwendet auch die Sequenz aus der Frage.