Alle ganzen Zahlen ausgeben


48

Schreiben Sie ein Programm oder eine Funktion, die nachweislich alle ganzen Zahlen genau einmal mit unendlich viel Zeit und Speicher ausgibt.

Mögliche Ausgaben könnten sein:

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, …

Dies ist keine gültige Ausgabe, da dies niemals negative Zahlen auflisten würde:

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

  • Die Ausgabe muss dezimal erfolgen, es sei denn, Ihre Sprache unterstützt keine dezimalen Ganzzahlen (verwenden Sie in diesem Fall die natürliche Darstellung von Ganzzahlen, die Ihre Sprache verwendet).

  • Ihr Programm muss bis zu den Zahlen mit der größten Größe des Standard-Integer-Typs Ihrer Sprache arbeiten.

  • Jede Ganzzahl muss durch ein Trennzeichen (ein Leerzeichen, ein Komma, ein Zeilenumbruch usw.) vom nächsten getrennt werden, das weder eine Ziffer noch das negative Vorzeichen Ihrer Sprache ist.

  • Das Trennzeichen darf sich an keiner Stelle ändern.

  • Das Trennzeichen kann aus mehreren Zeichen bestehen, sofern keines davon eine Ziffer oder ein negatives Vorzeichen ist (z. B. so gültig wie nur ,).

  • Jede unterstützte Ganzzahl muss irgendwann nach einer begrenzten Zeit gedruckt werden.

Wertung

Das ist , also gewinnt die kürzeste Antwort in Bytes

Bestenliste


3
Wenn unsere Sprache unendliche Listen unterstützt, können wir die Liste von einer Funktion ausgeben, anstatt sie zu drucken? (Wenn Sie print für eine solche Liste
aufrufen, werden

5
Ich bin der Meinung, dass die Anforderung von Ganzzahlen beliebiger Größe nichts anderes bewirkt, als Sprachen, die solche Ganzzahlen nicht enthalten, von der Teilnahme abzuhalten. Sie müssen entweder einen Import haben, den sie verwenden können, oder eine ganz andere Herausforderung als alle anderen lösen.
16.

2
@xnor Geändert, obwohl diese Art von Herausforderung den Namen ruiniert.
Fatalize

5
@xnor, Sprachen mit Ganzzahlen willkürlicher Genauigkeit müssen immer noch ein anderes Problem lösen als alle anderen. Alles, was diese Änderung bewirkt hat, ist, dieses Problem in vielen Sprachen langweilig trivial zu machen.
Peter Taylor

2
@ PeterTaylor Ja, das ist unglücklich. Die Verpackungslösungen haben für mich nicht das Gefühl, dass sie irgendwelche Negative drucken, aber ich sehe keinen Weg, den Unterschied genau zu spezifizieren, wenn es um Repräsentation geht.
16.

Antworten:


19

Sesos , 11 3 3 Bytes

0000000: c4ceb9                                            ...

Probieren Sie es online! Überprüfen Sie Debug , um den generierten SBIN-Code anzuzeigen.

Sesos Montage

Die obige Binärdatei wurde durch Zusammenstellen des folgenden SASM-Codes generiert.

set numout

jmp ; implicitly promoted to nop
    put,   fwd 1
    sub 1, put
    rwd 1, add 1
; jnz (implicit)

Wie ist das 3 Bytes?
Hoffentlich

1
Die Readme-Datei auf GitHub (im Header verlinkt) erklärt detailliert, wie die Anweisungen codiert sind.
Dennis

1
6 hexadezimale Ziffern / 2 = 3 Bytes @HopefullyHelefully
Stan Strum

@ StanStrum danke
hoffentlich

47

Haskell, 19 Bytes

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

Erzeugt die unendliche Liste [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...

Haskell erlaubt unendlich viele Listen von Haus aus. Wenn Sie eine solche Liste drucken, werden die Elemente für immer einzeln gedruckt.


2
Ich Liebe [n,1-n]!
Fehler

3
IMHO [1-n,n]würde eine schönere Ausgabe produzieren.
Neil

@Neil Ich stimme zu, habe es geändert.
16.

2
Ah, das ist monadisch concatMap (\n -> [1-n, n]) [1..], oder? Nett!
Carsten S

@CarstenS Ja genau.
Xnor

29

Brainfuck, 6 Bytes

Dies nutzt den Zellenumbruch und gibt alle möglichen Werte aus. In Brainfuck ist die native Ganzzahldarstellung ein Bytewert .

.+[.+]

Probieren Sie es online!


2
Schön, das ist die kürzeste Brainfuck-Antwort, die ich bisher bei PPCG gesehen habe.
Kevin Cruijssen

1
Dies funktioniert nicht bei Brainfuck-Versionen mit unbegrenzten Zellen. Bitte korrigieren Sie (auch wenn als separate Antwort)
John Dvorak

16
@JanDvorak Answers muss nicht in jeder Implementierung funktionieren , nur in einer von ihnen.
Martin Ender

7
Kann ich eine Erklärung bekommen, warum dies gültig ist? Es gibt keine Trennzeichen wie in der Frage erwähnt und keine Negative. Ebenso wie die Tatsache, dass Sie im Brainfuck Werte größer als 9 ausgeben können. Ich bin unerfahren im Codegolf und habe angefangen, an etwas zu arbeiten, das Negatives und Positives ausgibt.
Gtwebb

5
@SQB Auch bei unbegrenztem Speicher beträgt der native Ganzzahlentyp noch 8 Bit. Ein Java inthat nicht plötzlich mehr oder weniger Bits, nur weil Sie einen RAM hinzugefügt oder entfernt haben.
Fehler

26

Cubix , 14 12 Bytes

.(.\OSo;?.>~

Online testen! Sie können die Geschwindigkeit jetzt anpassen, wenn Sie möchten, dass sie schneller oder langsamer läuft.

Wie es funktioniert

Als erstes entfernt der Interpreter alle Leerzeichen und füllt den Code mit No-Ops auf, .bis er perfekt auf einen Würfel passt. Das bedeutet, dass der obige Code auch so geschrieben werden kann:

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

Jetzt wird der Code ausgeführt. Der IP (Anweisungszeiger) beginnt in der oberen linken Ecke der linken Seite und zeigt nach Osten. Im Folgenden sind die Pfade aufgeführt, die während der Ausführung des Programms erforderlich sind:

Bildbeschreibung hier eingeben

Die IP beginnt auf dem roten Pfad ganz links im Bild. Es wird dann ausgeführt OSo;, was Folgendes bewirkt:

  • ODrucken Sie die TOS (Top-of-Stack) als Ganzzahl. Zu Beginn des Programms enthält der Stapel unendlich viele Nullen, sodass dieser ausgegeben wird 0.
  • SDrücken Sie 32den Zeichencode für das Leerzeichen.
  • oDrucken Sie die Nutzungsbedingungen als Zeichen. Dies druckt ein Leerzeichen.
  • ;Pop die AGB. Entfernt die 32vom Stapel.

Jetzt trifft die IP die ?, die sie je nach Vorzeichen des TOS nach links, rechts oder gerade leitet. Im Moment ist die TOS 0, also geht es geradeaus. Das ist der blaue Weg; .tut nichts und die IP trifft den Pfeil >, der sie wieder entlang des roten Pfades nach Osten lenkt. ~Nimmt das bitweise NOT des TOS und ändert es in -1.

Hier erreicht die IP den rechten Rand des Netzes, der es nach links zurückwickelt; Dies druckt erneut die TOS (diesmal -1) und ein Leerzeichen.

Jetzt trifft die IP die ?wieder. Diesmal ist die TOS -1; da dies negativ ist, biegt die IP nach links ab und nimmt den grünen Pfad. Der Spiegel \lenkt die IP zu um (, wodurch die TOS dekrementiert und in geändert werden -2. Es kommt zurück und trifft den Pfeil; ~nimmt bitweise NICHT wieder auf und dreht den -2auf 1.

Wieder wird die TOS ausgegeben und ein Leerzeichen gedruckt. Dieses Mal, wenn die IP das trifft ?, ist die TOS 1; da dies positiv ist, biegt die IP nach rechts ab und nimmt den gelben Pfad. Der erste Operator, dem es begegnet, ist das SDrücken einer zusätzlichen 32Taste. das ;knallt es, bevor es irgendwelche Probleme verursachen kann.

Jetzt kehrt die IP zum Pfeil zurück und führt ihre Routine aus, ~indem sie die TOS in ändert -2und sie Odruckt. Da die TOS wieder negativ ist, geht die IP erneut den grünen Weg. Und es fährt immer so weiter *: rot, grün, rot, gelb, rot, grün, rot, gelb ... und druckt im folgenden Zyklus:

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

TL; DR

Dieses Programm durchläuft wiederholt diese 3 einfachen Schritte:

  1. Geben Sie die aktuelle Nummer und ein Leerzeichen aus.
  2. Wenn die aktuelle Zahl negativ ist, verringern Sie sie um 1.
  3. Nimm bitweise NICHT die aktuelle Nummer.

Nicht getrennte Version, 6 Bytes

nO?~>~

Das Entfernen der Trennung vereinfacht das Programm so sehr, dass es auf einen Einheitswürfel passen kann:

  n
O ? ~ >
  ~

* Hinweis : Kein Programm ist wirklich unendlich, da es nur bis zu 2 52 zählt (wobei JavaScript beginnt, die Ganzzahlgenauigkeit zu verlieren).


4
Schönes Diagramm! :) Hast du das von Hand erstellt oder ein Tool geschrieben, um es zu generieren?
Martin Ender

5
@MartinEnder Danke! Es wurde von Ihren Hexagony-Diagrammen inspiriert. Ich habe das von Hand gemacht; Ich würde gerne ein Tool schreiben, um sie zu generieren, wenn ich genug Zeit dazu habe.
ETHproductions

18

MATL , 8 Bytes

0`@_@XDT

Dies verwendet den Standarddatentyp von MATL, dh double, es funktioniert 2^53absolut. Die Ausgabe ist

0
-1
1
-2
2
···

Probieren Sie es online!

Erläuterung

0            % Push 0
  `     T    % Do...while true: infinite loop
   @_        % Push iteration index and negate
     @       % Push iteration index
      XD     % Display the whole stack

Warum dauert es so lange, bis der Druckvorgang beginnt?
Fatalize

@Fatalize Ich denke, Octave muss jedes Mal neu gestartet werden, wenn Sie ein MATL-Programm in TIO ausführen, und das dauert einige Zeit.
Fehler

@Fatalize Ich bin mir nicht sicher. Es geschieht im Online-Compiler, nicht offline. Ich dachte, es könnte mit Octave zu tun haben, der die Ausgabe
Luis Mendo

1
Es ist eine gute Idee, dies zu tun, @_@XDals @_D@Ddies zu tun. Sie können die 0 beim ersten Durchlauf einfügen.
Sanchises

3
XD+1 für
smiley

16

Shakespeare-Programmiersprache , 227 Bytes

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

Natürlich ist diese Antwort bei weitem nicht erfolgreich, aber ich fand es gut, dass dies ein Anwendungsfall ist, für den die SPL vergleichsweise gut geeignet ist.

Erklärt:

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

Wie Sie sehen können, wenn Sie diesen Code mit meiner Antwort auf die damit verbundene Herausforderung vergleichen, für immer zu zählen (dh alle natürlichen Zahlen zu drucken), nimmt die Länge des SPL-Codes ziemlich stark zu, wenn das Problem größer wird ...


1
Ich mag das. Es ist schrecklich zum Golfen, aber wunderbar zum Lesen.
Schweinefisch

Tippfehler in der letzten Zeile der Erklärung. Let us return to scene II.sollte sein scene I.
Oliver Ni

Vielen Dank für den Hinweis auf den Unterschied! Der Tippfehler war eigentlich im oberen Code: Wir dürfen Szene I nicht wiederholen, da sie $puckauf 0 zurückgesetzt würde und dann das Hochzählen nicht mehr funktionieren würde. Ich habe das fehlende Iim Code hinzugefügt und die Bytelänge korrigiert (was ohnehin ein bisschen verkehrt war)
Christallkeks

14

Python 2, 27 Bytes

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

Druckt -1 0 -2 1 -3 2 -4 3 ...


10

05AB1E , 9 6 Bytes

3 Bytes gespart dank Adnan

[ND,±,

Probieren Sie es online!

Drucke 0, -1, 1, -2, 2 ...getrennt durch Zeilenumbrüche.


2
Ich konnte es bis zu 6 Bytes runter einige bitweise Magie: [N,N±,.
Adnan

1
@Adnan: Schön! Ich habe früher versucht, etwas Ähnliches zu tun, habe es aber nicht verwendet ±und es endete 3 Bytes länger als deins.
Emigna

Ich weiß, es ist schon eine Weile her, D,kann aber durch ersetzt werden =, um ein Byte zu sparen.
Kevin Cruijssen

10

GNU sed, 189 + 2 (rn Flags) = 191 Bytes

Dies ist höchstwahrscheinlich die längste Lösung, da sed keine ganzzahligen oder arithmetischen Operationen hat. Daher musste ich einen Inkrementoperator mit beliebiger Größe nur mit regulären Ausdrücken emulieren .

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

Lauf:

echo | sed -rnf all_integers.sed

Ausgabe:

0
-1
1
-2
2
-3
3
etc.

10

Brainfuck, 127 Bytes

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

Probieren Sie es online!

Bei einem unendlichen Band würde das theoretisch für immer laufen.

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

Unkomprimiert

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

9

ShadyAsFuck , 3 Bytes

FVd

Erläuterung:

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

Dies nutzt den Zellenumbruch und gibt alle möglichen Werte aus. In SAF ist die native Ganzzahldarstellung ein Bytewert .


5
Diese Antwort ist ... zwielichtig.
Conor O'Brien

1
Ich habe mich gefragt, wer den Namen der Sprache hat, und dann habe ich gemerkt, von welcher Sprache er stammt.
John Dvorak

8

R, 25 24 Bytes

Dank @JDL ein Byte Golf gespielt.

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

Probieren Sie es online!

Beispielausgabe:

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

2
Sie können ersetzen while(1)mit repeat einem Zeichen zu speichern.
JDL

@ JDL Danke! Ich vergesse, dass Konstrukt manchmal existiert.
Rturnbull

7

Stapel, 56 Bytes

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

Ausgabe:

0
-1
1
-2
2
-3

usw. Funktioniert bis 2147483647; 58 Bytes, wenn Sie (-) 2147483648 in der Ausgabe möchten:

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

44 Byte, wenn alle unterstützten positiven Ganzzahlen gedruckt werden, dann sind alle unterstützten negativen Ganzzahlen zulässig und werden endlos wiederholt:

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

7

Java 7, 151 134 122 118 Bytes

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 Bytes gespart dank @flawr (und @xnor indirekt)

Nach Regeländerung .. ( 59 56 63 Bytes)

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

Da 2147483647 + 1 = -2147483648wir in Java nicht einfach i++unendlich weitermachen können, bestand die Herausforderung darin, alle Zahlen einmal zu drucken. Mit dem obigen Code mit zusätzlichem Bereich, wird es stattdessen alle ganzen Zahlen eines Druck von -2147483648bis 2147483647jeweils einmal, in der folgenden Reihenfolge: 0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648. Vielen Dank an @ OlivierGrégoire für den Hinweis auf Javas Verhalten in Bezug auf MIN_VALUE-1/ MAX_VALUE+1. Probieren Sie es hier aus.

Ungolfed & Testcode:

Probieren Sie es hier aus - dies führt zu einem Laufzeitfehler

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

Ausgabe:

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

1
Ich denke, Sie könnten ein paar Bytes sparen, indem Sie n und 1-n gleichzeitig drucken. Auf diese Weise könnten Sie die Verfälschung beseitigen. @xnor war der erste, der diese Idee hier verwendete.
Fehler

1
Ihr int-version-Programm gibt bei unendlicher Zeit jede ganze Zahl in unendlicher Zeit aus.
Olivier Grégoire

1
@ OlivierGrégoire Ah, MAX_VALUE + 1 ist natürlich MIN_VALUE .. seufz. Ich habe es bearbeitet, danke für den Hinweis.
Kevin Cruijssen

1
Wenn Sie mehr Golf spielen möchten (z. B. loswerden) MAX_VALUE, können Sie meine Antwort überprüfen (wahrscheinlich immer noch auf der letzten Seite).
Olivier Grégoire

1
Ihre 53-Byte-Lösung ist ein Snippet, keine Funktion oder ein Programm und daher ungültig.
Mego

6

DC (GNU oder OpenBSD) - 16 Bytes

Diese Version ist nicht kürzer als die unten stehende Version, sollte aber in der Lage sein, ohne dass der Stack in Ihrem PC explodiert. Trotzdem wird unendlich viel Speicherplatz in Anspruch genommen ... irgendwann ...

Wegen des rBefehls benötigt es GNU-DC oder OpenBSD-DC .

0[rp1+45Pprdx]dx

Prüfung:

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

DC - 16 Bytes

Ein bisschen gemein jetzt. ;-)

Diese Version missbraucht die Stapellänge als Zähler, während der Stapel wächst.

z[pz45Ppllx]dslx

Prüfung:

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

DC - 17 Bytes

Ohne schmutzige Tricks.

0[p1+45Ppllx]dslx

Prüfung:

$ dc -e '0[p1+45Ppllx]dslx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

+? für "früher oder später ... früher als Sie vielleicht erwarten"
Greg Martin

2
Anstatt zu [-]Ptun 45P. "GNU-Dc oder OpenBSD-Dc" - Gibt es noch andere Versionen, die in der Natur verbreitet sind?
Digital Trauma

1
Ich habe eine andere Lösung (oder ein paar), aber es handelt sich um tatsächliche negative Zahlen. Darf ich sie in einer neuen Antwort posten? Ich frage, weil sie diesen so ähnlich sehen, da sie dcnur wenige Operatoren haben. Ich habe sie unabhängig von diesen entwickelt.
Joe

@DigitalTrauma ... na klar ... der original Dc hat / hatte nicht rso "swap". Ich bin manchmal verwirrt, wenn ich mir die Dofferent-Versionen ansehe. Wahrscheinlich möchte niemand mehr im alten Dc codieren (und dort rwürde der Stapel gelöscht ). Vielleicht würde ich "Dc" in "AT & T dc" ändern? ... und danke für den 45PHinweis ...
Yeti

2
@yeti Ich habe gerade "dc" auf meine Antworten gesetzt. Ich glaube nicht, dass die Leute hier zu besorgt sind, besonders angesichts der Allgegenwart der "modernen" DC-Aromen.
Digital Trauma

6

C # 74 Bytes

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 + ","));
    }
}

Ausgabe:

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

Versuch es:

dotnetfiddle.net (limitiert auf 1000)


Sind das nicht Schnipsel und keine Funktionen / vollen Programme?
Pinkfloydx33

Sorry, volles Programm hinzugefügt
alex

2
Sie können die publicModifikatoren weglassen und 14 Bytes sparen. Die Standardeinstellungen funktionieren genauso gut.
Alejandro

@ Alejandro Danke, es ist mein erster Beitrag :)
alex

6

Ruby, 26 22 19 16 Bytes

Druckt durch Zeilenumbrüche getrennte Zahlen. -3 Bytes von @manatwork. -3 Bytes von @ m-chrzan.

0.step{|n|p~n,n}

Sie geben hier numerische Werte aus, ptun dies auch.
Manatwork

0.step{|n|p n,~n}für 17 Bytes.
m-chrzan

1
@ m-chrzan Da die Reihenfolge nicht so wichtig ist, konnte ich zusätzlich zu Ihrem Vorschlag ein zusätzliches Byte sparen!
Value Ink

6

JavaScript, 29 26 Bytes

Nicht unendliche Version, 26 Bytes

3 Bytes gespart dank ETHproductions

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

Zeigt alle Ganzzahlen zwischen -9007199254740991 und 9007199254740992 an.

Unendliche Version (ES6), 114 112 Bytes

2 Bytes gespart dank ETHproductions

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

zeigt alle ganzen Zahlen an, gegebene unendliche Zeit und Gedächtnis.


Sie können die Funktion Boilerplate löschen und ein vollständiges Programm aufrufen.
Conor O'Brien

@ ConorO'Brien - Oh, du hast recht. Danke :)
Arnauld

n[a,b,c]Gibt zurück n[c], sodass Sie die Klammern einfügen können n[(a||n.unshift(1),0)].
ETHproductions

Sie brauchen weder die 1in noch die for-Schleife. for(;;)läuft für immer. Mit können Sie zwei weitere Bytes speichern for(n=1;;)alert([1-n,n++]). Außerdem werden hier keine ES6-Funktionen mehr verwendet
;-)

5

> <> , 19 15 Bytes

1::1$-naonao1+!

Daraufhin wird Folgendes gedruckt:

0
1
-1
2
-2
3
-3

... und so weiter. Das Trennzeichen ist eine Newline.

Nach dem Lesen der Antwort von @ xnor neu geschrieben, um eine Version dieses Algorithmus zu verwenden. Beginnend mit n=1, gibt das Programm vor dem Inkrementieren 1-nund njeweils gefolgt von einem Zeilenumbruch aus n. Nach dem Überlaufen des Maximalwertes endet das Programm mit einem Fehler von something smells fishy.... Wann genau dies geschieht, hängt von der Implementierung des Interpreters ab.


Vorherige Version:

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

Ab 0 wird das Programm auf unbestimmte Zeit wiederholt. In jeder Schleife wird der aktuelle Wert zusammen mit einer neuen Zeile gedruckt. Es wird dann negiert und erhöht, wenn es positiv ist.


Ist xnor eindeutig ein "er"? Oder zeigen sich unsere unbewussten Vorurteile ...?
Greg Martin

2
@ GregMartin Es ist interessant, ich glaube nicht, dass ich jemals ein Geschlecht erwähnt habe.
16.

5

Bash + GNU-Dienstprogramme, 26

seq NaN|sed '1i0
p;s/^/-/'

Ich habe noch nie gesehen, wie Seq so benutzt wurde. Ist das wie ein Bug? Beginnt es auch, Zahlen nach einem Typüberlauf zu wiederholen? Ich weiß, dass $[++i]dies in Bash so ist.
Seshoumara

Sieht aus wie eine neuere Funktion - siehe den Quellcode . Das Hinzufügen von 1 zu NaN sollte keine Umgehung verursachen.
Digitales Trauma

Ich bin seq NaNzum Laufen gegangen und nach 999999 erfolgt der Druck in wissenschaftlicher Notation mit 5-stelliger Genauigkeit. In Bezug auf die Herausforderung ist dieser Wert dann die größte Ganzzahl, die Sie drucken, was in Ordnung ist, da der Rest eine vorherige Zahl nicht wiederholt. Es ist auch aufgefallen, dass Sie seq mit ausführen können inf, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird, wie bei nan. +1
seshoumara

5

bc, 17 16 Bytes

Edit: 1 Byte weniger dank Digital Trauma .

Neben der Vielfalt der bisher verwendeten Sprachen präsentiere ich eine bc-Lösung, die mit Ganzzahlen beliebiger Größe funktioniert . Nach dem Code ist eine neue Zeile erforderlich, die in der Gesamtzahl der Bytes gezählt wird.

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

In der ersten Iteration iist nicht definiert, aber das Drucken gibt 0 zu meiner Überraschung.


1 Byte kürzer:for(;;){i;-++i}
Digitales Trauma

@DigitalTrauma Danke, ich habe meine Antwort aktualisiert. Das Lustige ist, dass ich dieses Schleifenkonstrukt heute in meiner anderen Bash-Antwort verwendet habe , aber vergessen habe, dass bces auch so war.
Seshoumara

Oder for(;;){i++;-i}(gleiche Länge).
sch

5

Labyrinth , 9 Bytes

!`
\:"
 (

Probieren Sie es online!

Dies funktioniert auch und ist im Wesentlichen dasselbe:

 "
`:(
\!

Erläuterung

Der Kontrollfluss in diesem Code ist ziemlich lustig. Denken Sie daran, dass der Anweisungszeiger (IP) in einem Labyrinth-Programm dem Pfad von Nicht-Leerzeichen folgt und den oberen Rand des Stapels an einer beliebigen Kreuzung untersucht, um zu entscheiden, welchen Pfad Sie verwenden möchten:

  • Wenn die Oberseite des Stapels positiv ist, biegen Sie rechts ab.
  • Wenn die Spitze des Stapels Null ist, fahren Sie geradeaus weiter.
  • Wenn die Oberseite des Stapels negativ ist, biegen Sie links ab.

Wenn die IP eine Sackgasse erreicht, dreht sie sich um (der Befehl wird am Ende nur einmal ausgeführt). Und die IP beginnt in der oberen linken Ecke und bewegt sich nach Osten. Beachten Sie auch, dass der Stapel implizit mit einer unendlichen Anzahl von Nullen gefüllt ist.

Das Programm startet mit diesem kurzen Bit:

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

Jetzt befindet sich die IP an der relevanten Kreuzung und bewegt sich geradeaus auf die, (die die Oberseite des Stapels dekrementiert -1. Die IP stößt in eine Sackgasse und dreht sich um. :dupliziert die Oberseite des Stapels noch einmal. Jetzt ist die Oberseite des Stapels negativ und die IP dreht sich nach links (nach Westen). Wir führen nun eine weitere Iteration der Hauptschleife durch:

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

Diesmal ist die Oberseite des Stapels positiv, also dreht sich IP nach rechts (nach Westen) und führt sofort eine weitere Iteration der Hauptschleife aus, bei der der Stapel gedruckt wird 1. Dann, nachdem es wieder negiert wurde, schlagen wir :mit -1auf den Stapel.

Diesmal dreht sich die IP nach links (nach Osten). Das "ist nur ein No-Op und die IP dreht sich in der Sackgasse um. :macht eine weitere Kopie und dieses Mal dreht sich die IP nach Süden. (Dekrementiert den Wert auf -2, dreht sich die IP wieder um. Wenn die Spitze des Stapels immer noch negativ ist, dreht sich die IP nun nach Westen :und führt die nächste Iteration der Hauptschleife durch.

Auf diese Weise iteriert die IP nun zwischen einer Iteration mit enger Schleife, bei der eine positive Zahl gedruckt wird, und einer Iteration, bei der beide Sackgassen durchlaufen werden, um den Wert zu dekrementieren, bevor eine negative Zahl gedruckt wird.

Sie könnten sich fragen, warum es das "in der zweiten Zeile gibt, wenn es eigentlich nichts tut: Wenn die IP-Adresse :einen negativen Wert erreicht, kann sie nicht nach links (Osten) abbiegen, sodass sie stattdessen nach rechts (Westen) abbiegen würde (Als Faustregel gilt: Wenn die übliche Richtung an einer Kreuzung nicht verfügbar ist, nimmt die IP die entgegengesetzte Richtung). Das bedeutet, dass die IP auch niemals (den unteren Rand erreichen würde und wir nicht zwischen positiven und negativen Iterationen unterscheiden könnten.


Das habe ich mir ausgedacht, bevor ich Ihre Antwort gesehen habe: pastebin.com/VHzAvABe
Robert Hickman

5

JavaScript (ES5), 32 31 30 29 Byte

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

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

Dank Patrick Roberts 1 Byte gespart! 2 Bytes gespart dank Conor O'Brien!


1
Wie wäre es [i++,-i].map(alert)statt alert(i++),alert(-i)?
Conor O'Brien

for(;;)ist ein Byte kürzer alswhile(1)
Patrick Roberts

@ ConorO'Brien mapist ES6
Paul Schmitz


Sie können das i=0;Bit innerhalb der for-Schleife verschieben, um ein Byte zu speichern.
Conor O'Brien

4

Java, 65 54 Bytes

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

Ungolfed-Testcode

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

    r.accept(0);
}

3
biggest magnitude of the standard integer type of your language intist der Standard-Integer-Typ von Java.
Shaun Wild

1
Tut mir leid, die Anforderungen haben sich in der Zwischenzeit geändert ...
16.

2
Sie können es Golf ()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};( 53 Bytes )
Kevin Cruijssen

@ KevinCruijssen Das fickt den Abstand ...
Shaun Wild

1
Bei unendlicher Zeit gibt es jede ganze Zahl unendlich oft aus.
Olivier Grégoire

4

C #, 83 Bytes

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

Ungolfed:

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

Ausgänge:

0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6.......

Es gibt eine Menge Dinge, die man tun kann, um die Zeichen zu reduzieren. Zuerst benötigt Ihr Programm keinen Namespace. Zweitens muss der Klassenname nicht so lang sein. Außerdem rufen Sie console.writeline zweimal auf, was für einen Stellvertreter vereinfacht werden kann. Das while true kann für (;;) zu aa vereinfacht werden, und die if-Anweisung kann entfernt werden, indem der Wert Null zuerst durch den Delegaten ausgegeben wird.
Nico

Vielen Dank. Ich wusste nicht, ob ein Delegierter "betrügt"?
Pete Arden

Hallo, willkommen bei PPCG! Ich denke, Sie finden das interessant zu lesen: Tipps zum Golfen in C # . Außerdem benötigen Sie kein vollständiges Programm, sondern nur eine Funktion (sofern die Aufforderung nichts anderes angibt). Genügt void f(){code_present_in_main}also für die Byteanzahl. Was den Code selbst void f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}
angeht

1
Oh toll, es ist jetzt viel gesünder, danke! Ich würde mich nicht richtig fühlen, wenn ich all deine Antworten verwende, aber es ist definitiv eine Verbesserung und diese Tipps werden mir beim zukünftigen Golfen helfen!
Pete Arden

@PeteArden Ich verstehe, dass ich meinen Code nicht benutze, da es ein anderer Ansatz ist. Hmm, Sie können immer noch 2 Bytes in Ihrer eigenen Antwort spielen, indem Sie das decimal n=0und n++;in die for-Schleife setzen:void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}} :)
Kevin Cruijssen

4

C # 86 66 Bytes

Neue Antwort:

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

Klar:

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

Alte Antwort (86 Bytes):

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

Ungolfed:

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

1
Es gibt 2 nutzlose Leerzeichen. Eins vor Enumerable.Rangeund eins vor int.MaxValue.
Yytsi

1
Willkommen bei PPCG! +1 Das könnte Sie auch interessieren: Golftipps in C # . In Ihren aktuellen Antworten können die Klammern für die for-Schleife entfernt werden, da sich nur eine Zeile darin befindet. Alternativ ist dies ein kürzerer Ansatz: void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}( 57 Bytes ) .
Kevin Cruijssen

@ KevinCruijssen Danke. Brakets sind weg.
Daniel Lerps

4

J, 25 Bytes

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

Funktioniert weiter der Online-Site , kann aber noch nicht auf dem Computer überprüft werden. Druckt Zahlen wie:

0
1
_1
2
_2
3
_3
4

usw.


4

Powershell, 20 19 18 Bytes

Verbessert durch schamloses Stehlen von TimmyDs Antwort

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

Ausgabe:

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

Alte Version:

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

Nicht sicher, warum tbh, aber - nicht deklarierte Variable (oder - $ null) wird als 0 ausgewertet, was uns in dieser Version 2 Bytes erspart hat ...


1
Willkommen bei PPCG!
AdmBorkBork


4

Brachylog , 2 Bytes

ẉ⊥

Probieren Sie es online!

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

Da das Programm keine Eingabe erhält, bleibt die Eingabevariable des Hauptprädikats uneingeschränkt. Zuerst wird angenommen, dass es 0 ist, aber wenn die Ausführung trifft , wird zum einzig möglichen Fehlerpunkt zurückgegangen: der Wahl des Werts für die Eingabevariable. Dann wird 1, -1 und jede andere Ganzzahl ausprobiert, wobei jede durch Zeilenumbrüche getrennte Zahl für immer gedruckt wird, da immer ein Zurückverfolgen erzwungen wird , und der Effekt von wird sofort ausgeführt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.