Wydrukuj wszystkie liczby całkowite

48

Napisz program lub funkcję, która wydrukuje wszystkie liczby całkowite dokładnie raz, gdy otrzyma nieskończony czas i pamięć.

Możliwe wyniki to:

0, 1, -1, 2, -2, 3, -3, 4, -4, …

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -2, -3, -4, -5, -6, -7, -8, -9, 10, 11, …

To nie jest prawidłowy wynik, ponieważ nigdy nie wyliczyłby liczb ujemnych:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,…

  • Dane wyjściowe muszą być dziesiętne, chyba że Twój język nie obsługuje liczb całkowitych dziesiętnych (w takim przypadku użyj naturalnej reprezentacji liczb całkowitych używanych przez Twój język).

  • Twój program musi pracować z liczbami o największej wielkości ze standardowych liczb całkowitych w twoim języku.

  • Każda liczba całkowita musi być oddzielona od następnego za pomocą dowolnego separatora (spacja, przecinek, podział wiersza itp.), Który nie jest cyfrą ani znakiem ujemnym Twojego języka.

  • Separator nie może się zmieniać w żadnym momencie.

  • Separator może składać się z wielu znaków, o ile żaden z nich nie jest cyfrą ani znakiem ujemnym (np. Jest tak samo ważny jak tylko ,).

  • Każda obsługiwana liczba całkowita musi ostatecznie zostać wydrukowana po upływie określonego czasu.

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w bajtach

Tabela liderów

Fatalizować
źródło
3
Jeśli nasz język obsługuje listy nieskończone, czy możemy wydrukować listę z funkcji zamiast drukowania? (Wywołanie print na takiej liście spowoduje wydrukowanie jego elementów pojedynczo na zawsze.)
xnor 16.09.16
5
Wydaje mi się, że wymóg dotyczący liczb całkowitych o dowolnym rozmiarze nie zniechęca języków bez udziału takich liczb całkowitych. Muszą mieć import, z którego mogą skorzystać, lub rozwiązać zupełnie inne wyzwanie niż wszyscy inni.
xnor
2
@xnor Zmieniono, choć tego rodzaju ruiny same nazwa wyzwania.
Fatalize
5
@ xnor, języki z liczbami całkowitymi o dowolnej precyzji wciąż muszą rozwiązać inny problem niż wszyscy inni, więc wszystko, co dokonało się w tej zmianie, sprawia, że ​​problem ten jest nudno trywialny w wielu językach.
Peter Taylor
2
@PeterTaylor Tak, to niefortunne. Rozwiązania dotyczące owijania nie wydają mi się, aby drukowały jakieś negatywy, ale nie widzę sposobu, aby jednoznacznie określić różnicę, gdy chodzi o reprezentację.
xnor

Odpowiedzi:

19

Sesos , 11 3 3 bajty

0000000: c4ceb9                                            ...

Wypróbuj online! Zaznacz opcję Debuguj, aby zobaczyć wygenerowany kod SBIN.

Montaż Sesos

Powyższy plik binarny został wygenerowany przez skompletowanie następującego kodu SASM.

set numout

jmp ; implicitly promoted to nop
    put,   fwd 1
    sub 1, put
    rwd 1, add 1
; jnz (implicit)
Dennis
źródło
jak tam te 3 bajty?
Mam nadzieję, że będzie
1
Plik Readme na GitHub (link w nagłówku) szczegółowo wyjaśnia, w jaki sposób kodowane są instrukcje.
Dennis
1
6 cyfr szesnastkowych / 2 = 3 bajty @HopefullyHelpful
Stan Strum
@StanStrum dzięki
Mam nadzieję, że jest
47

Haskell, 19 bajtów

do n<-[1..];[1-n,n]

Tworzy nieskończoną listę [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...

Haskell zezwala na nieskończone listy natywnie. Wydrukowanie takiej listy spowoduje wydrukowanie jej elementów raz na zawsze.

xnor
źródło
2
Kocham [n,1-n]!
flawr
3
IMHO [1-n,n]przyniosłoby lepszy wynik.
Neil
@Neil Zgadzam się, zmieniłem to.
xnor
2
Ach, to monadese concatMap (\n -> [1-n, n]) [1..], prawda? Miły!
Carsten S
@CarstenS Tak, dokładnie.
xnor
29

Brainfuck, 6 bajtów

Wykorzystuje to zawijanie komórek i drukuje wszystkie możliwe wartości. W Brainfuck natywna reprezentacja liczb całkowitych jest wartością bajtową .

.+[.+]

Wypróbuj online!

wada
źródło
2
Fajnie, to najkrótsza odpowiedź Brainfuck, jaką do tej pory widziałem na PPCG.
Kevin Cruijssen
1
To nie zadziała w przypadku wersji typu „pieprzenie mózgu” z niezwiązanymi komórkami. Napraw (nawet jeśli jako osobną odpowiedź)
John Dvorak,
16
@JanDvorak Odpowiedzi nie muszą działać w każdej implementacji, tylko w jednej z nich.
Martin Ender
7
Czy mogę uzyskać wyjaśnienie, dlaczego jest to ważne? Nie ma żadnych separatorów, jak wspomniano w pytaniu, i żadnych negatywów. Jak również fakt, że możesz wygenerować wartości większe niż 9 w pieprzeniu mózgu. Brakuje mi doświadczenia w golfie kodowym i zacząłem pracować nad czymś, co dawało wynik ujemny i dodatni, aż do wyższych liczb, zanim dojdzie do wzrostu.
gtwebb
5
@SQB Nawet przy nieograniczonej pamięci natywny typ liczb całkowitych jest nadal 8-bitowy. Java intnie ma nagle mniej lub więcej bitów tylko dlatego, że dodałeś lub usunąłeś trochę pamięci RAM.
flawr
26

Cubix , 14 12 bajtów

.(.\OSo;?.>~

Przetestuj online! Możesz teraz dostosować prędkość, jeśli chcesz, aby działała szybciej lub wolniej.

Jak to działa

Pierwszą rzeczą, którą robi interpreter, jest usunięcie wszystkich białych znaków i uzupełnienie kodu brakiem operacji, .aż idealnie dopasuje się do kostki. Oznacza to, że powyższy kod można również napisać w następujący sposób:

    . (
    . \
O S o ; ? . > ~
. . . . . . . .
    . .
    . .

Teraz kod jest uruchamiany. IP (wskaźnik instrukcji) zaczyna się w lewym górnym rogu skrajnie lewej twarzy, skierowanej na wschód. Oto ścieżki, którymi zajmuje się podczas uruchamiania programu:

wprowadź opis zdjęcia tutaj

Adres IP zaczyna się na czerwonym szlaku po lewej stronie obrazu. Następnie uruchamia się OSo;, co wykonuje następujące czynności:

  • OWydrukuj TOS (góra stosu) jako liczbę całkowitą. Na początku programu stos zawiera nieskończone zera, więc jest drukowany 0.
  • SPush 32, kod char dla znaku spacji.
  • oWydrukuj TOS jako znak. To drukuje spację.
  • ;Pop TOS. Usuwa 32ze stosu.

Teraz adres IP uderza w ?, który kieruje go w lewo, w prawo lub prosto, w zależności od znaku TOS. W tej chwili TOS jest 0, więc idzie prosto. To jest niebieska ścieżka; .nic nie robi, a IP uderza w strzałkę >, która ponownie kieruje ją na wschód czerwoną ścieżką. ~przejmuje bitowe NIE z TOS, zmieniając je na -1.

Tutaj IP dociera do prawej krawędzi sieci, która owija ją z powrotem w lewo; to ponownie drukuje TOS (tym razem -1) i spację.

Teraz IP uderza ?ponownie. Tym razem TOS jest -1; ponieważ jest to ujemne, adres IP skręca w lewo, podążając zieloną ścieżką. Lustro \odchyla adres IP do (, co zmniejsza TOS, zmieniając go na -2. Wraca i uderza w strzałę; ~trwa bitowe NIE ponownie, obracając -2się 1.

Ponownie TOS jest wyprowadzany i spacja drukowana. Tym razem, gdy IP uderza w ?, TOS jest 1; ponieważ jest to pozytywne, IP skręca w prawo, podążając żółtą ścieżką. Pierwszym napotkanym operatorem jest Spchanie dodatkowego 32; ;wyskakuje to wcześniej może to spowodować żadnych kłopotów.

Teraz adres IP wraca do strzałki i wykonuje procedurę, ~zmieniając TOS -2i Odrukując go. Ponieważ TOS znów jest ujemny, adres IP ponownie podąża zieloną ścieżką. I tak po prostu ciągle jeździ na rowerze *: czerwony, zielony, czerwony, żółty, czerwony, zielony, czerwony, żółty ..., drukowanie w następującym cyklu:

0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 -7 7 -8 8 -9 9 -10 10 ...

TL; DR

Ten program wielokrotnie przechodzi przez 3 proste kroki:

  1. Podaj aktualny numer i spację.
  2. Jeśli bieżąca liczba jest ujemna, zmniejsz ją o 1.
  3. Nie bierz bitowo NIE bieżącego numeru.

Wersja niepodzielona, ​​6 bajtów

nO?~>~

Usunięcie separacji upraszcza program tak bardzo, że można go zmieścić na kostce jednostkowej:

  n
O ? ~ >
  ~

* Uwaga : Żaden program nie jest naprawdę nieskończony, ponieważ liczą tylko do 2 52 (gdzie JavaScript zaczyna tracić precyzję liczb całkowitych).

ETHprodukcje
źródło
4
Niezły schemat! :) Czy stworzyłeś to ręcznie czy napisałeś narzędzie do jego wygenerowania?
Martin Ender
5
@MartinEnder Dziękujemy! Został zainspirowany twoimi diagramami heksagonii. Stworzyłem to ręcznie; chociaż chciałbym napisać narzędzie do ich generowania, gdy będę miał na to dość czasu.
ETHprodukcje
18

MATL , 8 bajtów

0`@_@XDT

Wykorzystuje domyślny typ danych MATL, czyli doubledziała do 2^53wartości bezwzględnej. Dane wyjściowe to

0
-1
1
-2
2
···

Wypróbuj online!

Wyjaśnienie

0            % Push 0
  `     T    % Do...while true: infinite loop
   @_        % Push iteration index and negate
     @       % Push iteration index
      XD     % Display the whole stack
Luis Mendo
źródło
Dlaczego jest tak duże opóźnienie przed rozpoczęciem drukowania?
Fatalize
@Fatalize Myślę, że Octave musi zostać zrestartowany za każdym razem, gdy uruchamiasz program MATL w TIO, a to zajmuje trochę czasu.
flawr
@Fatalize Nie jestem pewien. Dzieje się tak w kompilatorze online, a nie offline. Pomyślałem, że może to mieć związek ze stronicowaniem wyjścia przez Octave, ale teraz nie jestem pewien, czy to jest powód
Luis Mendo
1
Sprytny pomysł, aby to zrobić @_@XD, @_D@Dabyś mógł włączyć 0 przy pierwszym uruchomieniu.
Sanchises
3
XD+1 za buźkę
TuxCrafting
16

Język programowania Szekspira , 227 bajtów

.
Ajax,.
Puck,.
Act I:
Scene I:
[Enter Ajax,Puck]
Puck:You ox!
Ajax:Be me without myself.Open thy heart.
Scene II:      
Ajax:Be thyself and ash.Open thy heart.Be me times you.Open thy heart.Be me times you.Let us return to scene II.

Oczywiście, ta odpowiedź nie jest bliska wygranej, ale podobało mi się, że jest to przypadek użycia, do którego SPL jest stosunkowo dobrze przystosowany.

Wyjaśniono:

// Everything before the first dot is the play's title, the parser treats it as a comment.
.

// Dramatis personae. Must be characters from Shakespeare's plays, again with a comment.
Ajax,.
Puck,.

// Acts and scenes serve as labels. Like the whole play, they can have titles too,
// but for the sake of golfing I didn't give them any.
Act I:

// This scene would've been named "You are nothing"
Scene I:

// Characters can talk to each other when on stage
[Enter Ajax,Puck]

// Characters can assign each other values by talking. Nice nouns = 1, ugly nouns = -1.
Puck: You ox!                 // Assignment: $ajax = -1;
Ajax: Be me without myself.   // Arithmetic: $puck = $ajax - $ajax;
      Open thy heart.         // Standard output in numerical form: echo $puck;

// Working title "The circle of life"
Scene II:

// Poor Ajax always doing all the work for us
Ajax: Be thyself and ash.          // $puck = $puck + (-1);
      Open thy heart.              // echo $puck;
      Be me times you.             // $puck *= $ajax;  (remember $ajax==-1 from scene I)
      Open thy heart.              // echo $puck;
      Be me times you.             // negate again
      Let us return to scene II.   // infinite goto loop

Jak widać, porównując ten kod z moją odpowiedzią na pokrewne wyzwanie polegające na liczeniu na zawsze (tj. Drukowaniu wszystkich liczb naturalnych), długość kodu SPL rośnie dość źle, gdy zwiększa się rozmiar problemu ...

Christallkeks
źródło
1
Lubię to. Jest okropny dla golfistów, ale wspaniały dla czytania.
świnie
Literówka w ostatnim wierszu objaśnienia. Let us return to scene II.powinno być scene I.
Oliver Ni
Dzięki za wskazanie różnicy! Literówka była w rzeczywistości w górnym kodzie: nie wolno nam powtarzać sceny I, ponieważ resetuje się $puckdo zera, a następnie liczenie nie będzie już działać. Dodałem braki Iw kodzie i poprawiłem długość bajtu (co zresztą trochę się nie zgadzało)
Christallkeks,
14

Python 2, 27 bajtów

n=0
while 1:print~n,n,;n+=1

Wydruki -1 0 -2 1 -3 2 -4 3 ...

xnor
źródło
10

05AB1E , 9 6 bajtów

Zaoszczędzono 3 bajty dzięki Adnan

[ND,±,

Wypróbuj online!

Wydruki 0, -1, 1, -2, 2 ...oddzielone znakami nowej linii.

Emigna
źródło
2
Udało mi się dostać go do 6 bajtów użyciu niektórych bitowe magii: [N,N±,.
Adnan
1
@Adnan: Fajnie! Próbowałem zrobić coś podobnego wcześniej, ale nie użyłem ±i skończyło się to 3 bajtami dłużej niż twój.
Emigna
Wiem, że minęło trochę czasu, ale D,można go zastąpić, =aby zapisać bajt.
Kevin Cruijssen
10

GNU sed, 189 + 2 (flagi rn) = 191 bajtów

Jest to najprawdopodobniej najdłuższe rozwiązanie, ponieważ sed nie ma operacji na liczbach całkowitych ani operacji arytmetycznych. Jako taki musiałem emulować dowolny operator przyrostu rozmiaru , używając tylko wyrażeń regularnych.

s/^/0/p
:
:i;s/9(@*)$/@\1/;ti
s/8(@*)$/9\1/
s/7(@*)$/8\1/
s/6(@*)$/7\1/
s/5(@*)$/6\1/
s/4(@*)$/5\1/
s/3(@*)$/4\1/
s/2(@*)$/3\1/
s/1(@*)$/2\1/
s/0(@*)$/1\1/
s/^@+/1&/;y/@/0/
s/^/-/p;s/-//p
t

Biegać:

echo | sed -rnf all_integers.sed

Wynik:

0
-1
1
-2
2
-3
3
etc.
seshoumara
źródło
10

Brainfuck, 127 bajtów

+[-->+>+[<]>-]>-->+[[.<<<]>>-.>>+<[[-]>[->+<]++++++++[-<++++++>>-<]>--[++++++++++>->-<<[-<+<+>>]]>+>+<]<<<[.<<<]>>.+.>[>>>]<<<]

Wypróbuj online!

Biorąc pod uwagę, że nieskończona taśma teoretycznie będzie działać wiecznie.

0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7,8,-8,9,-9,10,-10,11,-11,12,-12,13,-13,14,-14,15,-15,16,-16,17,-17,18,-18,19,-19,20,-20,21,-21,22,-22,23,-23,24,-24,25,-25,26,-26,27,-27,28,-28,29,-29,30,-30,31,-31,32,-32,33,-33,34,-34,35,-35,36,-36,37,-37,38,-38,39,-39,40,-40,41,-41,42,-42,43,-43,44,-44,45,-45,46,-46,47,-47,48,-48,49,-49,50,-50,51,-51,52,-52,53,-53,54,-54,55,-55,56,-56,57,-57,58,-58,59,-59,60,-60,61,-61,62,-62,63,-63,64,-64,65,-65,66,-66,67,-67,68,-68,69,-69,70,-70,71,-71,72,-72,73,-73,74,-74,75,-75,76,-76,77,-77,78,-78,79,-79,80,-80,81,-81,82,-82,83,-83,84,-84,85,-85,86,-86,87,-87,88,-88,89,-89,90,-90,91,-91,92,-92,93,-93,94,-94,95,-95,96,-96,97,-97,98,-98,99,-99,...

Bez kompresji

+[-->+>+[<]>-]>-->+
[
  [.<<<]>>-.>>+<
  [[-]>[->+<]
    ++++++++[-<++++++>>-<]>--
    [++++++++++>->-<<[-<+<+>>]]>+>+<
  ]<<<
  [.<<<]>>.+.>
  [>>>]<<<
]
primo
źródło
9

ShadyAsFuck , 3 bajty

FVd

Wyjaśnienie:

F     prints the current cell value (0) and increases it by 1
 V    starts a loop and prints the current value
  d   increases the current value and ends the loop

Wykorzystuje to zawijanie komórek i drukuje wszystkie możliwe wartości. W SAF natywna reprezentacja liczb całkowitych jest wartością bajtową .

wada
źródło
5
Ta odpowiedź jest… podejrzana.
Conor O'Brien
1
Zastanawiałem się, kto wymyślił nazwę języka, a potem zauważyłem, z jakiego języka pochodzi.
John Dvorak,
8

R, 25 24 bajtów

Grał jeden bajt dzięki @JDL.

repeat cat(-F,F<-F+1,'')

Wypróbuj online!

Przykładowe dane wyjściowe:

0 1 -1 2 -2 3 -3 4 -4 5 -5 6 -6 7 -7 8 -8 9 -9 10 
rturnbull
źródło
2
Można wymienić while(1)z repeat zaoszczędzić char.
JDL
@JDL Thanks! Zapominam, że konstrukcja czasami istnieje.
rturnbull
7

Partia, 56 bajtów

@set n=0
:l
@echo %n%
@set/an+=1
@echo -%n%
@goto l

Wynik:

0
-1
1
-2
2
-3

itp. Działa do 2147483647; 58 bajtów, jeśli chcesz (-) 2147483648 w danych wyjściowych:

@set n=0
:l
@echo %n:-=%
@set/an-=1
@echo %n%
@goto l

44 bajty, jeśli drukowanie wszystkich obsługiwanych dodatnich liczb całkowitych, to wszystkie obsługiwane ujemne liczby całkowite, a następnie powtarzanie w nieskończoność, jest dopuszczalne:

@set n=0
:l
@echo %n%
@set/an+=1
@goto l
Neil
źródło
7

Java 7, 151 134 122 118 bajtów

import java.math.*;void c(){for(BigInteger i=BigInteger.ONE,y=i;;i=i.add(y))System.out.println(y.subtract(i)+"\n"+i);}

12 bajtów zapisanych dzięki @flawr (i @xnor pośrednio)

Po zmianie reguły .. ( 59 56 63 bajtów)

void c(){for(int i=0;i>1<<31;)System.out.println(~--i+"\n"+i);}

Ponieważ w Javie 2147483647 + 1 = -2147483648nie możemy po prostu robić i++i kontynuować w nieskończoność, ponieważ wyzwaniem było wydrukowanie wszystkich liczb raz. Z powyższego kodu z dodatkiem zakresie, to zamiast drukować wszystkie liczby całkowite od -2147483648na 2147483647raz każda, w następującej kolejności: 0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648. Podziękowania dla @ OlivierGrégoire za wskazanie zachowania Javy w odniesieniu do MIN_VALUE-1/ MAX_VALUE+1. Wypróbuj tutaj.

Kod niepoznany i testowy:

Wypróbuj tutaj - powodując błąd w czasie wykonywania

import java.math.*;
class M{
  static void c() {
    for(BigInteger i = BigInteger.ONE, y = i; ; i = i.add(y)){
      System.out.println(y.subtract(i) + "\n" + i);
    }
  }

  public static void main(String[] a){
    c();
  }
}

Wynik:

0
1
-1
2
-2
3
-3
4
-4
5
-5
...
Kevin Cruijssen
źródło
1
Myślę, że możesz zaoszczędzić kilka bajtów, drukując jednocześnie n i 1-n, w ten sposób możesz usunąć kompresję. @xnor jako pierwszy użył tego pomysłu tutaj.
flawr
1
Twój intprogram do zmiany wersji, podany w nieskończonym czasie, wypisze każdą liczbę całkowitą w nieskończonej ilości czasu.
Olivier Grégoire,
1
@ OlivierGrégoire Ah, oczywiście, MAX_VALUE + 1 to MIN_VALUE .. westchnienie. Zredagowałem to, dzięki za zwrócenie na to uwagi.
Kevin Cruijssen
1
Jeśli chcesz więcej grać w golfa (np. Pozbyć się MAX_VALUE, możesz sprawdzić moją odpowiedź (prawdopodobnie wciąż na ostatniej stronie))
Olivier Grégoire
1
Twoje 53-bajtowe rozwiązanie jest fragmentem kodu, a nie funkcją lub programem, dlatego nie jest poprawne.
Mego
6

DC (smak GNU lub OpenBSD) - 16 bajtów

Ta wersja nie jest krótsza niż wersja poniżej, ale powinna być w stanie działać bez wybuchu stosu na komputerze. Niemniej jednak nieskończone duże liczby zajmą nieskończoną ilość pamięci ... kiedyś ...

Z powodu rpolecenia potrzebuje GNU-DC lub OpenBSD-DC .

0[rp1+45Pprdx]dx

Test:

$ dc -e '0[rp1+45Pprdx]dx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

DC - 16 bajtów

Trochę złośliwe teraz. ;-)

Ta wersja wykorzystuje długość stosu jako licznik, jednocześnie pozwalając na wzrost stosu.

z[pz45Ppllx]dslx

Test:

$ dc -e 'z[pz45Ppllx]dslx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

DC - 17 bajtów

Bez brudnych sztuczek.

0[p1+45Ppllx]dslx

Test:

$ dc -e '0[p1+45Ppllx]dslx' | head
0
-1
1
-2
2
-3
3
-4
4
-5
yeti
źródło
+? za „prędzej czy później ... wcześniej niż można się spodziewać”
Greg Martin
2
Zamiast [-]Pzrobić 45P. „GNU-Dc lub OpenBSD-Dc” - Czy są jakieś inne wersje powszechnie dostępne na wolności?
Cyfrowa trauma
1
Mam inne rozwiązanie (lub kilka), ale dotyczą one faktycznych liczb ujemnych. Czy mogę zamieścić je w nowej odpowiedzi? Pytam, ponieważ wyglądają tak podobnie do nich, ponieważ dcma tylko kilku operatorów. Opracowałem je niezależnie od nich.
Joe
@DigitalTrauma ... jasne ... oryginalny Dc nie ma / nie miał rjako „swap”. Czasem się mylę, gdy patrzę na różne wersje. Prawdopodobnie nikt już nie chce kodować w starożytnym Dc (i tam rwyczyści stos). Może zmieniłbym „Dc” na „AT&T dc”? ... i dzięki za 45Ppodpowiedź ...
yeti
2
@yeti Po prostu umieściłem „dc” w moich odpowiedziach. Nie sądzę, żeby ludzie tutaj się tym martwili, szczególnie biorąc pod uwagę wszechobecność „nowoczesnych” smaków DC.
Digital Trauma
6

C # 74 bajtów

class P{void Main(){for(var x=0m;;System.Console.Write(x+++","+-x+","));}}

class P
{
    void Main()
    {
        for(var x = 0m; ; System.Console.Write(x++ + "," + -x + ","));
    }
}

Wynik:

0,-1,1,-2,2,-3,3,-4,4,-5,5,-6,6,-7,7,-8,8,-9,9,-10,10,...

Spróbuj:

dotnetfiddle.net (ograniczony do 1000)

alex
źródło
Czy to nie są fragmenty, a nie funkcje / pełne programy?
pinkfloydx33
Przepraszamy, dodano pełny program
alex
2
Możesz pominąć publicmodyfikatory i zapisać 14 bajtów. Wartości domyślne będą działać równie dobrze.
Alejandro,
@Alejandro dziękuję, to mój pierwszy post :)
alex
6

Ruby, 26 22 19 16 bajtów

Drukuje liczby oddzielone znakami nowej linii. -3 bajty z @manatwork. -3 bajty z @ m-chrzan.

0.step{|n|p~n,n}
Wartość tuszu
źródło
Wyprowadzasz tutaj wartości liczbowe, więc pzrobi to również.
manatwork
0.step{|n|p n,~n}dla 17 bajtów.
m-chrzan
1
@ m-chrzan, ponieważ kolejność nie ma większego znaczenia, udało mi się wygolić dodatkowy bajt poza twoją sugestią!
Wartość tuszu
6

JavaScript, 29 26 bajtów

Wersja nieskończona, 26 bajtów

Zaoszczędzono 3 bajty dzięki produktom ETH

for(n=1;;)alert([1-n,n++])

wyświetli wszystkie liczby całkowite od -9007199254740991 do 9007199254740992.

Wersja nieskończona (ES6), 114 112 bajtów

Zaoszczędzono 2 bajty dzięki produktom ETH

for(n=[-1];1;alert(n[a||n.unshift(1),0]?(x=n.join``)+' -'+x:0))for(i=n.length,a=0;i--;a=(n[i]+=1-a)>9?n[i]=0:1);

wyświetli wszystkie liczby całkowite, biorąc pod uwagę nieskończony czas i pamięć.

Arnauld
źródło
Możesz upuścić płytę grzewczą funkcji i nazwać ją pełnym programem.
Conor O'Brien
@ ConorO'Brien - Masz rację. Dzięki :)
Arnauld
n[a,b,c]zwraca n[c], więc możesz wstawić nawiasy n[(a||n.unshift(1),0)].
ETHprodukcje
Nie potrzebujesz 1wejścia dla pętli ani; for(;;)działa wiecznie. Możesz zapisać dwa kolejne bajty za pomocą for(n=1;;)alert([1-n,n++]). Ponadto nie korzysta już z żadnych funkcji ES6 ;-)
ETHproductions
5

> <> , 19 15 bajtów

1::1$-naonao1+!

Spowoduje to wydrukowanie następujących elementów:

0
1
-1
2
-2
3
-3

... i tak dalej. Separator to nowa linia.

Przepisane po przeczytaniu odpowiedzi @ xnor, aby użyć wersji tego algorytmu. Począwszy od n=1drukuje programowych 1-ni n, każdy następuje znak nowej linii, przed inkrementacji n. Po przepełnieniu wartości maksymalnej program zakończy się błędem wynoszącym something smells fishy.... To, kiedy to nastąpi, zależy od implementacji interpretera.


Poprzednia wersja:

0:nao0$-:10{0(?$~+!

Począwszy od 0, program zapętla się w nieskończoność. W każdej pętli drukowana jest bieżąca wartość wraz z nową linią. Następnie jest negowany i zwiększany, jeśli jest dodatni.

Sok
źródło
Czy xnor jednoznacznie jest „on”? A może nasze nieświadome uprzedzenia pokazują ...?
Greg Martin
2
@GregMartin To ciekawe, nie sądzę, żebym kiedykolwiek wspominał o płci.
xnor
5

Narzędzia Bash + GNU, 26

seq NaN|sed '1i0
p;s/^/-/'
Cyfrowa trauma
źródło
Nigdy nie widziałem, żeby Seq był używany w ten sposób, czy to jak błąd? Czy zacznie się też powtarzać liczby po przepełnieniu typu? Wiem, że $[++i]robi to w bash.
seshoumara,
Wygląda jak nowsza funkcja - zobacz kod źródłowy . Dodanie 1 do NaN nie powinno spowodować zawinięcia.
Cyfrowy uraz
Wyruszyłem seq NaNdo pracy i po 999999 drukowanie odbywa się w notacji naukowej z dokładnością do 5 cyfr. Jeśli chodzi o wyzwanie, ta wartość jest wówczas największą liczbą całkowitą, którą drukujesz, co jest w porządku, ponieważ reszta nie powtórzy poprzedniej liczby. Zauważyłem również, że możesz uruchomić sekwencję inf, bez rozróżniania wielkości liter, tak jak dla nan. +1
seshoumara,
5

bc, 17 16 bajtów

Edycja: 1 bajt mniej dzięki Digital Trauma .

Dodając do różnorodności używanych dotychczas języków, przedstawiam rozwiązanie bc, które działa z liczbami całkowitymi o dowolnym rozmiarze . Po kodzie wymagany jest nowy wiersz, który jest liczony w bajtach ogółem.

for(;;){i;-++i}

W pierwszej iteracji inie jest zdefiniowany, ale wydrukowanie powoduje moje zdziwienie 0.

seshoumara
źródło
1 bajt krótszy:for(;;){i;-++i}
Cyfrowa trauma
@DigitalTrauma Dzięki, zaktualizowałem swoją odpowiedź. Zabawne jest to, że użyłem dziś tej konstrukcji pętli w mojej innej odpowiedzi na bash , ale zapomniałem, bcże też ją miałem.
seshoumara,
Lub for(;;){i++;-i}(ta sama długość).
sch.
5

Labirynt , 9 bajtów

!`
\:"
 (

Wypróbuj online!

To również działa i jest zasadniczo takie samo:

 "
`:(
\!

Wyjaśnienie

Przepływ sterowania w tym kodzie jest raczej zabawny. Pamiętaj, że wskaźnik instrukcji (IP) w programie Labirynt podąża ścieżką znaków spacji i bada górę stosu na dowolnym skrzyżowaniu, aby zdecydować, którą ścieżkę wybrać:

  • Jeśli górna część stosu jest dodatnia, skręć w prawo.
  • Jeśli górna część stosu wynosi zero, idź dalej prosto.
  • Jeśli górna część stosu jest ujemna, skręć w lewo.

Kiedy IP trafia w ślepy zaułek, odwraca się (wykonując polecenie na końcu tylko raz). I adres IP zaczyna się w lewym górnym rogu, przesuwając się na wschód. Zauważ też, że stos jest domyślnie wypełniony nieskończoną liczbą zer na początek.

Program zaczyna się od tego krótkiego bitu:

!    Print top of stack (0).
`    Multiply by -1 (still 0).
:    Duplicate.

Teraz adres IP znajduje się na odpowiednim skrzyżowaniu i przesuwa się na wprost, do (którego zmniejsza się górna część stosu -1. IP uderza w ślepy zaułek i się odwraca. :ponownie powtarza górę stosu. Teraz wierzch stosu jest ujemny, a IP skręca w lewo (na zachód). Teraz wykonujemy jeszcze jedną iterację głównej pętli:

\   Print linefeed.
!   Print top of stack (-1).
`   Multiply by -1 (1).
:   Duplicate.

Tym razem górna część stosu jest dodatnia, więc IP skręca w prawo (na zachód) i natychmiast wykonuje kolejną iterację głównej pętli, która wypisuje 1. Następnie, po ponownym zanegowaniu, uderzamy :z -1na stosie.

Tym razem adres IP skręca w lewo (wschód). To "tylko brak op, a IP zmienia się w ślepy zaułek. :robi kolejną kopię i tym razem IP skręca na południe. (zmniejsza wartość -2, IP ponownie się obraca. Ponieważ górna część stosu jest nadal ujemna, IP skręca teraz na zachód :i wykonuje następną iterację głównej pętli.

W ten sposób adres IP będzie teraz iterował między ciasną pętlą iteracji, drukując liczbę dodatnią, a iteracją, która przechodzi przez oba ślepe zaułki w celu zmniejszenia wartości przed wydrukowaniem liczby ujemnej.

Możesz zadać sobie pytanie, dlaczego jest "druga linia, jeśli tak naprawdę nic nie robi: bez niej, gdy IP osiągnie :wartość ujemną, nie może skręcić w lewo (wschód), więc zamiast tego skręciłby w prawo (zachód) (ogólna zasada, jeśli zwykły kierunek na skrzyżowaniu nie jest dostępny, adres IP przyjmie kierunek przeciwny). Oznacza to, że IP nigdy nie osiągnie (dolnej granicy i nie możemy odróżnić dodatnich i ujemnych iteracji.

Martin Ender
źródło
Oto, co wymyśliłem, zanim zobaczyłem twoją odpowiedź: pastebin.com/VHzAvABe
Robert Hickman,
5

JavaScript (ES5), 32 31 30 29 bajtów

for(i=0;;)[i++,-i].map(alert)

Wydruki 0 -1 1 -2 2 -3 3 -4 4 -5 5 ...

Zaoszczędził 1 bajt dzięki Patrick Roberts! Zaoszczędzono 2 bajty dzięki Conorowi O'Brienowi!

Paul Schmitz
źródło
1
A może [i++,-i].map(alert)zamiast alert(i++),alert(-i)?
Conor O'Brien
for(;;) jest o jeden bajt krótszy niż while(1)
Patrick Roberts
@ ConorO'Brien map to ES6
Paul Schmitz
@PaulSchmitz Nope, 5. edycja.
Conor O'Brien
Możesz przenieść i=0;bit do pętli for, aby zapisać bajt.
Conor O'Brien
4

Java, 65 54 bajtów

i->{for(;;)System.out.print(i+++" "+(-i<i?-i+" ":""));

Nie testowany kod testu

public static void main(String[] args) {
    Consumer<Integer> r = i -> {
        for (;;) {
            System.out.print(i++ + " " + (-i < i ? -i + " " : ""));
        }
    };

    r.accept(0);
}
Shaun Wild
źródło
3
biggest magnitude of the standard integer type of your language intjest standardowym typem całkowitym Java.
Shaun Wild,
1
Przepraszamy za to, że wymagania zmieniły się w międzyczasie ...
flawr
2
Możesz ()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};
zagrać w
@KevinCruijssen To pieprzy odstępy ...
Shaun Wild
1
Biorąc pod uwagę nieskończony czas, wypisze każdą liczbę całkowitą nieskończoną liczbę razy.
Olivier Grégoire,
4

C #, 83 bajty

void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}

Nie golfowany:

void f()
{
  for (decimal n=0;;n++)
  {
    Console.Write(n + ",");
    if (n > 0) Console.Write(-n + ",");
   }
}

Wyjścia:

0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6.......
Pete Arden
źródło
Istnieje wiele rzeczy, które można zrobić, aby zmniejszyć liczbę postaci. Najpierw program nie potrzebuje przestrzeni nazw. Po drugie, nazwa klasy nie musi być tak długa. Wykonujesz również dwa wywołania do console.writeline, które można uprościć dla delegata. Chwilę true można uprościć do aa dla (;;), a instrukcję if można usunąć, wysyłając najpierw wartość zero przez delegata.
Nico,
Dzięki. Nie wiedziałem, czy delegat może „oszukiwać”?
Pete Arden,
Cześć, witamy w PPCG! Myślę, że może Cię to zainteresować: Wskazówki dotyczące gry w golfa w C # . Ponadto nie potrzebujesz pełnego programu, wystarczy funkcja (chyba że wyzwanie mówi inaczej). void f(){code_present_in_main}Wystarczy więc do liczenia bajtów. Jeśli chodzi o sam kod, możesz void f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}
zagrać w
1
Och, świetnie, teraz jest o wiele zdrowiej, dzięki! Nie czułbym się dobrze, używając wszystkich twoich odpowiedzi, ale to zdecydowanie poprawa, a te wskazówki pomogą mojej przyszłej grze w golfa!
Pete Arden,
@PeteArden Rozumiem, że nie używam mojego kodu, ponieważ jest to inne podejście. Hmm, nadal możesz decimal n=0n++;void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}
zagrać w
4

C # 86 66 bajtów

Nowa odpowiedź:

void b(){for(var i=0;;i++)Console.Write(i==0?","+i:","+i+",-"+i);}

Jasny:

void b() 
{
    for(var i=0;;i++)
        Console.Write(i == 0 ? "," + i : "," + i + ",-" + i);
}

Stara odpowiedź (86 bajtów):

void a(){Console.Write(String.Join(",",Enumerable.Range(int.MinValue,int.MaxValue)));}

Nie golfowany:

void a()
{
    Console.Write(String.Join(",", Enumerable.Range(int.MinValue, int.MaxValue)));
}
Daniel Lerps
źródło
1
Istnieją 2 bezużyteczne białe znaki. Jeden przed Enumerable.Rangei jeden przed int.MaxValue.
Yytsi
1
Witamy w PPCG! +1 To może Cię zainteresować do przeczytania: Wskazówki dotyczące gry w golfa w C # . W bieżącej odpowiedzi można usunąć nawiasy dla pętli for, ponieważ w środku jest tylko jedna linia. Alternatywnie jest to krótsze podejście: void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}( 57 bajtów ) .
Kevin Cruijssen
@KevinCruijssen Thanks. Brakuje braków.
Daniel Lerps,
4

J, 25 bajtów

([:$:1:`-`(1+-)@.*[echo)0

Działa na stronie internetowej , ale nie mogę tego jeszcze zweryfikować na komputerze. Wyświetla liczby takie jak:

0
1
_1
2
_2
3
_3
4

itp.

Conor O'Brien
źródło
4

PowerShell, 20 19 18 bajtów

Ulepszony przez bezwstydne kradzież z odpowiedzi TimmyD

0;for(){-++$i;$i}

Wynik:

0
-1
1
-2
2
-3
3
-4
4

Stara wersja:

for(){-$i;$i++;$i}

Nie jestem pewien, dlaczego tbh, ale - niezadeklarowana zmienna (lub - $ null) jest ewaluowana jako 0, co pozwoliło nam zaoszczędzić 2 bajty w tej wersji ...

cokolwiek
źródło
1
Witamy w PPCG!
AdmBorkBork,
4

Brachylog , 2 bajty

ẉ⊥

Wypróbuj online!

ẉ     Print with a newline
      the input,
 ⊥    then try again.

Ponieważ program nie otrzymuje danych wejściowych, zmienna wejściowa głównego predykatu pozostaje nieograniczona. Początkowo przyjmuje się, że wynosi 0, ale gdy wykonanie się powiedzie , następuje powrót do jedynego możliwego punktu awarii: wybór wartości dla zmiennej wejściowej. Następnie wypróbowuje 1, -1 i każdą inną liczbę całkowitą, drukując każdą z nich oddzieloną zawsze znakami nowej linii, ponieważ zawsze wymusza powrót do poprzedniej linii , a efekt jest wykonywany natychmiast.

Niepowiązany ciąg
źródło