Nieskończenie wiele ℕ

Nov 30 2020

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:

  1. Każda liczba musi być oddzielona (skończoną) ilością widocznych, białych lub nowych znaków linii, które nie są cyframi.
  2. Program nie może zakończyć się (chyba że w jakiś sposób zapisałeś wszystkie liczby).
  3. 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

23 Lyxal Nov 30 2020 at 21:03

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.

17 cairdcoinheringaahing Nov 30 2020 at 18:18

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

05AB1E , 2 bajty

∞L

Wypróbuj online! Stopka formatuje dane wyjściowe jak przykład z postu.

wypycha listę wszystkich liczb naturalnych, Lprzyjmuje zakres [1 .. n]dla każdej liczby.

13 RobinRyder Nov 30 2020 at 18:59

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 catoznaczają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 1s i większej liczby (w tym bardzo dużych liczb dzięki catartefaktowi). 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

10 xnor Dec 01 2020 at 07:26

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 .

9 xnor Nov 30 2020 at 23:38

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.

7 DigitalTrauma Nov 30 2020 at 18:18

Bash + GNU Coreutils, 20

seq -fseq\ %g inf|sh

Wypróbuj online! - Wyłącza się po 60 sekundach.

7 DigitalTrauma Nov 30 2020 at 18:29

sed 4.2.2 , 20

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

Wypróbuj online!

Wynik jest jednoargumentowy, zgodnie z tym meta konsensusem .

7 Mukundan314 Dec 01 2020 at 04:51

Bash , 20 bajtów

seq inf|xargs -l seq

Wypróbuj online!

6 DominicvanEssen Dec 01 2020 at 08:36

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

5 cairdcoinheringaahing Nov 30 2020 at 17:58

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.

5 LuisMendo Nov 30 2020 at 19:28

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

5 Giuseppe Nov 30 2020 at 23:06

R , 25 21 bajtów

repeat T=print(T:0+1)

Wypróbuj online!

Wydruki 2..1, 3..1, 4..1i tak dalej.

Podziękowania dla Robina Rydera za -4 bajty.

To działa, ponieważ printniewidocznie zwraca swój pierwszy argument.

5 PizgenalFilegav Dec 02 2020 at 03:18

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

przekazać , 27 bajtów

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

Wypróbuj online!

Odlicza się od kolejnych liczb.

4 J42161217 Nov 30 2020 at 18:20

Język Wolfram (Mathematica) , 25 bajtów

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

Wypróbuj online!

-1 bajt @att

3 UnrelatedString Nov 30 2020 at 18:40

Brachylog , 4 bajty

⟦₁ẉ⊥

Wypróbuj online!

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

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..nGdzie n jest bieżącą długością listy. Jest to efekt uboczny.
  • $:@,~Dołącz listę do siebie ,~i wywołaj funkcję rekurencyjnie $:@.
3 Edgar Dec 01 2020 at 00:29

Rust , 54 bajty

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

Wypróbuj online

3 Sisyphus Dec 01 2020 at 00:59

Ruby , 17 bajtów

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

Wypróbuj online!

3 Neil Nov 30 2020 at 23:00

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.

3 Sisyphus Dec 01 2020 at 01:04

C (gcc) , 43 bajty

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

Wypróbuj online!

3 NinaLisitsinskaya Dec 01 2020 at 05:42

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.

3 Noodle9 Nov 30 2020 at 18:26

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!

3 DMiddendorf Nov 30 2020 at 20:13

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.

3 AdamKatz Dec 03 2020 at 20:41

Bash, 21 bajtów

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

Uruchom wersję 21B w Try It Online

Definiuje funkcję, sktóra jest uruchamiana w seq NUMBERmiejscu, NUMBERw którym zaczyna się od 1i 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

3 roblogic Dec 01 2020 at 11:40

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/randomalternatywy, ale był to bałagan!

3 Xcali Nov 30 2020 at 19:51

Perl 5 , 22 20 bajtów

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

Wypróbuj online!

2 Noodle9 Nov 30 2020 at 21:38

AWK , 34 bajty

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

Wypróbuj online!

2 user Nov 30 2020 at 18:18

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.