Nieskończenie wiele ℕ
Tło:
Sekwencja nieskończonych liczb naturalnych to ciąg, który zawiera każdą liczbę naturalną nieskończenie wiele razy.
Aby wyjaśnić, każdy numer musi być drukowany wiele razy!
Wyzwanie:
Wypisz sekwencję nieskończonych liczb naturalnych z najkrótszym kodem.
Zasady:
- Każda liczba musi być oddzielona (skończoną) ilością widocznych, białych lub nowych znaków linii, które nie są cyframi.
- Program nie może zakończyć się (chyba że w jakiś sposób zapisałeś wszystkie liczby).
- Każdy sposób zapisu takiej sekwencji jest dopuszczalny.
Przykłady:
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...
Zauważ, że piszemy wszystkie naturalne od 1 do N dla wszystkich N ∈ ℕ.
Opinie i zmiany w pytaniu są mile widziane. Zainspirowany moim egzaminem z rachunku różniczkowego.
Odpowiedzi
Scratch 3.0 , 13 20 bloków / 121 70 bajtów

Jako składnia SB:
define(n)(i
say(i
((n)+<(i)=(n)>)((1)+((i)*<(i)<(n
To mówi każdy termin w sekwencji. Można dodać opóźnienie, aby liczby nie były szybko uruchamiane.
Nigdy nie widziałem tak maltretowanego zadrapania. Wywołujesz funkcję pustej nazwy z pustymi parametrami . Mój Boże. Cokolwiek oszczędza bajty!
-51 dzięki @att
Wypróbuj na Scratchu
Wyjaśnienie wkrótce.
Łuska , 2 bajty
ḣN
Wypróbuj online!
Pierwsza odpowiedź Husk! Używa również kolejności w pytaniu
Jak to działa
ḣN - Main program
N - The infinite list [1, 2, 3, ...]
ḣ - Prefixes; [[1], [1, 2], [1, 2, 3], ...]
05AB1E , 2 bajty
∞L
Wypróbuj online! Stopka formatuje dane wyjściowe jak przykład z postu.
∞
wypycha listę wszystkich liczb naturalnych, L
przyjmuje zakres [1 .. n]
dla każdej liczby.
R , 26 25 24 bajty
-1 bajt dzięki Dominicowi van Essenowi
repeat cat(rpois(9,9)+1)
Wypróbuj online!
Wyprowadza losową nieskończoną sekwencję liczb całkowitych, pobraną z \$Poisson(9)\$dystrybucja (+1, aby uniknąć generowania zer). Są one produkowane w partiach po 9 na raz, dla większej „wydajności”. Każda dodatnia wartość średniej zadziała; użycie średniej równej 9 maksymalizuje wariancję dla liczb 1-znakowych.
Wszystkie liczby pojawiają się nieskończenie często w tym sensie, że dla dowolnej liczby całkowitej \$k\$spodziewana liczba wystąpień \$k\$w pierwszym \$n\$realizacje trafiają do \$\infty\$jako \$n\to\infty\$:
$$E\left[\sum_{i=1}^n\mathbb{I}_{X_i=k}\right]\xrightarrow[n\to\infty]{}\infty.$$
Wywołania cat
oznaczające, że w jednej partii 9 są liczby całkowite są oddzielone spacjami, ale nie ma separatora między partiami. Zdecydowana większość 3- i 4-cyfrowych liczb w wyjściu wynika z tego artefaktu, ale istnieje teoretyczna gwarancja, że takie liczby (i większe liczby) zostaną ostatecznie wyprowadzone, przynajmniej jeśli założymy, że bazowy generator liczb losowych jest perfekcyjnie.
Aby uzyskać większą wariancję, możemy postępować zgodnie z sugestią Giuseppe dla tej samej liczby bajtów:
repeat cat(1%/%runif(9))
Wypróbuj online!
Powoduje to powstawanie większej liczby 1
s i większej liczby (w tym bardzo dużych liczb dzięki cat
artefaktowi). Ponownie, liczba wystąpień dowolnej liczby całkowitej osiąga nieskończoność, gdy rozmiar wyniku osiąga nieskończoność.
Dwie inne odpowiedzi R są krótsze, przy użyciu metod deterministycznych: Giuseppe i Dominic van Essen
Python 2 , 31 bajtów
R=1,
while 1:print R;R+=len(R),
Wypróbuj online!
Dzięki @Danis za zaoszczędzenie bajtu tutaj R+=R[-1]+1,
. To
Wydruki:
(1,)
(1, 1)
(1, 1, 2)
(1, 1, 2, 3)
(1, 1, 2, 3, 4)
(1, 1, 2, 3, 4, 5)
...
Zbiera listę liczb od 1 do n (poza tym, że 1 pojawia się dwukrotnie) za każdym razem dodając ostatni element plus jeden.
32 bajty
R=[1]
for x in R:print R;R+=x+1,
Wypróbuj online!
Python 2 , 30 bajtów (domniemane)
n=2
while 1:print~-2**n%n;n+=1
Wypróbuj online!
Sekwencja \$2^n \bmod n\$Przypuszcza się, że ( A015910 ) przyjmuje wszystkie wartości \$k \geq 0\$z wyjątkiem \$k=1\$. Nie wiem, czy przypuszcza się również, że każda wartość pojawia się nieskończenie wiele razy, ale wydaje się spójna ze znanymi rozwiązaniami dla określonych wartości .
Zamiast tego obliczamy \$(2^n-1) \bmod n\$co sprawia, że \$0\$zamiast \$1\$ być jedyną brakującą wartością (jeśli przypuszczenie jest prawdziwe).
Patrząc na wynik, możesz pomyśleć, że \$2\$nigdy nie jest wyświetlany, ale w rzeczywistości pojawia się jako pierwszy dla \$n=4700063497\$i dla coraz wyższych wartości w A050259 .
Python 2 , 33 bajty
R=[1]
for x in R:print x;R+=x+1,1
Wypróbuj online!
To jest dłuższe, ale całkiem sprytne, drukowanie sekwencji ABACABA .
Haskell , 17 bajtów
[[1..x]|x<-[1..]]
Wypróbuj online!
Ponieważ wyzwanie wydaje się zezwalać na niepłaskie wyjście, możemy po prostu wygenerować listę list [1],[1,2],[1,2,3,],...
, zgodnie z sugestią @AZTECCO.
Haskell , 19 bajtów
l=1:do x<-l;[x+1,1]
Wypróbuj online!
Zdefiniowana rekurencyjnie nieskończona płaska lista z sekwencją ABACABA1,2,1,3,1,2,1,4,...
( A001511 ).
Wariant o tej samej długości:
l=(:[1]).succ=<<0:l
Wypróbuj online!
20 bajtów
l=do x<-[1..];[1..x]
Wypróbuj online!
Licząc 1,1,2,1,2,3,1,2,3,4,...
, ale jako płaska lista.
Bash + GNU Coreutils, 20
seq -fseq\ %g inf|sh
Wypróbuj online! - Wyłącza się po 60 sekundach.
sed 4.2.2 , 20
:;s/(1*).*/1\1 &/p;b
Wypróbuj online!
Wynik jest jednoargumentowy, zgodnie z tym meta konsensusem .
Bash , 20 bajtów
seq inf|xargs -l seq
Wypróbuj online!
R , 21 bajtów
(również prawie jednocześnie zidentyfikowany przez Robina Rydera)
while(T<-T+1)cat(T:0)
Wypróbuj online!
Podobnie jak w przykładowej sekwencji, ale każda podseria jest odwrócona, a wartość początkowa w każdej podserii jest reprezentowana przez początkowe zero (czyli 03
na przykład dla 3).
Jeśli nie lubisz początkowych zer, spójrz na poprzednią wersję za pomocą show
(poniżej) lub na odpowiedź Giuseppe .
R , 23 22 bajty
Edycja: -1 bajt dzięki Robin Ryder
while(T<-T+1)show(1:T)
Wypróbuj online!
Wyprowadza sekwencję użytą w przykładzie oraz dodatkową nieskończoną liczbę kopii liczby 1
.
Każda liczba jest oddzielona spacją „
”, znakiem nowej linii i nawiasem „ \n[
” lub nawiasem „ [
” i spacją .
2-bajtowy golfier (przynajmniej w momencie wysyłania) niż pozostałe dwie odpowiedzi R ...
Galaretka , 4 bajty
‘RṄß
Wypróbuj online!
Myślę, że daje to wszystkie liczby nieskończoną liczbę razy, ale ponieważ jest to inny format wyjściowy, nie jestem w 100% pewien
Jak to działa
‘RṄß - Main link. Left argument is initially n = 0
‘ - Increment
R - Range
Ṅ - Print
ß - Recursively run the main link
W przypadku n = 0
, ‘RṄ
wyjścia [1]
. Następnie powtarzamy, używając n = [1]
. ‘RṄ
następnie wyprowadza [[1, 2]]
i ponownie powtarzamy, używając n = [[1, 2]]
, które wyjścia [[[1, 2], [1, 2, 3]]]
itp.
Octave , 29 28 bajtów
do disp(fix(1/rand)) until 0
Wypróbuj online!
Wyprowadza sekwencję \$(x_k)\$niezależnych losowych liczb naturalnych o identycznym rozkładzie. Każda wartość \$x_k\$uzyskuje się jako \$1/r\$zaokrąglone do zera, gdzie \$r\$ma równomierny rozkład w przedziale \$(0,1)\$.
Dla danego indeksu \$k\$i dla każdego \$n \in \mathbb N\$, istnieje niezerowe prawdopodobieństwo, że \$x_k=n\$(ignorowanie niedokładności zmiennoprzecinkowych). Dlatego z prawdopodobieństwem \$1\$każdy \$n\$pojawia się nieskończenie często w sekwencji \$(x_k)\$.
R , 25 21 bajtów
repeat T=print(T:0+1)
Wypróbuj online!
Wydruki 2..1, 3..1, 4..1
i tak dalej.
Podziękowania dla Robina Rydera za -4 bajty.
To działa, ponieważ print
niewidocznie zwraca swój pierwszy argument.
Befunge , 5 bajtów
>1+?.
Wypróbuj online!
Na każdym wyjściu istnieje 50% szansa, że bieżąca liczba zostanie wydrukowana i zresetowana do 1, a 50% szansa, że 2
zostanie wydrukowana, a bieżąca liczba wzrośnie o jakąś losową liczbę nieparzystą (po rozkładzie wykładniczym). Może się to zdarzyć wiele razy, więc można również wyprowadzić liczby nieparzyste.
Każda liczba naturalna ma niezerowe prawdopodobieństwo wystąpienia, więc ostatecznie zostanie wydrukowana nieskończenie wiele razy.
Wyjaśnienie
>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 bajtów
]:.1-:0`j
]:+!
Wypróbuj online!
Rozwiązanie deterministyczne, wypisujące każdy zakres od 1 do n
w porządku malejącym.
Wyjaśnienie
] # 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.
przekazać , 27 bajtów
>v
1","@"}
^+^<#-1
1+<<<
Wypróbuj online!

Odlicza się od kolejnych liczb.
Język Wolfram (Mathematica) , 25 bajtów
Do[Print@n,{m,∞},{n,m}]
Wypróbuj online!
-1 bajt @att
Brachylog , 4 bajty
⟦₁ẉ⊥
Wypróbuj online!
ẉ Print with a newline
⟦₁ the range from 1 to something,
⊥ then try again.
J , 13 bajtów
$:@,~[echo@#\
Wypróbuj online!
Wyjścia 1
, 1 2
, 1 2 3 4
, 1 2 3 4 5 6 7 8
, itp, z każdego numeru z własnej linii.
echo@#\
Wyświetla długości prefiksów bieżącej listy, tj.1..n
Gdzie n jest bieżącą długością listy. Jest to efekt uboczny.$:@,~
Dołącz listę do siebie,~
i wywołaj funkcję rekurencyjnie$:@
.
Rust , 54 bajty
(2..).for_each(|x|(1..x).for_each(|y|print!("{} ",y)))
Wypróbuj online
Ruby , 17 bajtów
loop{p *1..$.+=1}
Wypróbuj online!
Węgiel , 8 bajtów
W¹«I⊕ⅉD⸿
Wypróbuj online! Link prowadzi do pełnej wersji kodu. Działa poprzez wielokrotne drukowanie następnej liczby na płótnie, a następnie zrzucanie całego płótna.
2 bajty dla wersji, która drukuje \$ n \$termin ciągu:
IΣ
Wypróbuj online! Objaśnienie: Po prostu drukuje sumę cyfrową wejścia. Biorąc pod uwagę dowolną liczbę naturalną \$ n \$, wszystkie wartości w postaci \$ \frac { 10 ^ n - 1 } 9 10 ^ m \$mieć cyfrową sumę \$ n \$za każdy \$ m \$dlatego każda liczba naturalna pojawia się nieskończenie często.
C (gcc) , 43 bajty
i;main(j){for(;;)printf("%d ",j=--j?:++i);}
Wypróbuj online!
JavaScript (V8) , 26 bajtów
for(a=b='';;)write(a+=--b)
Wypróbuj online!
Znak -
używany jako separator, a wyjście zaczyna się od niego, więc nie jestem pewien, czy jest to dopuszczalne.
C (gcc) , 52 49 44 bajty
Zapisano 5 bajtów dzięki AZTECCO !!!
f(i,j){for(j=1;printf("%d ",j--);)j=j?:++i;}
Wypróbuj online!
Java (JDK) , 61 bajtów
v->{for(int i,j=2;;j++)for(i=0;++i<j;)System.out.println(i);}
Wypróbuj online!
Edycja: Dziękuję @użytkownikowi za skrócenie kilku bajtów i pomoc w nauce czegoś dzisiaj! Wielkie dzięki dla @KevinCruijssen za -2 bajty.
Bash, 21 bajtów
s(){ seq $[++n];s;};s
1
1
2
1
2
3
…
Uruchom wersję 21B w Try It Online
Definiuje funkcję, s
która jest uruchamiana w seq NUMBER
miejscu, NUMBER
w którym zaczyna się od 1
i zwiększa się przy każdym uruchomieniu, a następnie uruchamia się rekurencyjnie. Po definicji biegniemy s
.
Aby określić koszt 5B -s\
(separatorem jest znak spacji), można go dostosować do rozwiązania jednej odpowiedzi na wiersz przy 26 bajtach:
s(){ seq -s\ $[++n];s;};s
1
1 2
1 2 3
…
Uruchom wersję 26B w Try It Online
Zsh, 29 .. 19 bajtów
Rozwiązanie @AdamKatz: Wypróbuj online!
for ((;++i;))seq $i
19 bajtów, port z basha: s(){seq $[++n];s};s
25 bajtów (na @AdamKatz): for ((;++i;))echo {1..$i}
25 bajtów : for ((;;i++))shuf -i 1-$i
26 bajtów (na @AdamKatz): for ((;;))echo {1..$[++i]}
29 bajtów : for ((i=1;;))echo {1..$[i++]}
Próbowałem użyć /dev/random
alternatywy, ale był to bałagan!
Perl 5 , 22 20 bajtów
say while$_.=++$i.$"
Wypróbuj online!
AWK , 34 bajty
{for(;;++i)for(j=0;j++<i;)print j}
Wypróbuj online!
APL (Dyalog Unicode) , 12 11 bajtów (SBCS)
Zapisano 1 bajt dzięki @ovs
{∇1+⍴⎕←⍳⍵}1
Wypróbuj online!
Ten również używa sekwencji z pytania.