Kürzeste Endlosschleife ohne Ausgabe

121

Ihre Aufgabe ist es, die kürzeste Endlosschleife zu erstellen!

Bei dieser Herausforderung geht es darum, eine Endlosschleife zu erstellen, die im Gegensatz zu ihrer möglichen Duplizierung keine Ausgabe erzeugt. Der Grund dafür ist, dass der Code möglicherweise kürzer ist, wenn keine Ausgabe erfolgt.

Regeln

  • Jede Einreichung muss ein vollständiges Programm sein.
  • Sie müssen die kürzeste Endlosschleife erstellen.
  • Selbst wenn Ihrem Programm irgendwann der Speicher ausgeht, wird es trotzdem akzeptiert, solange es die ganze Zeit von Anfang an ausgeführt wird, bis der Speicher voll ist. Auch wenn der Arbeitsspeicher nicht ausreicht, sollte STDERR trotzdem nicht belastet werden.
  • Das Programm darf keine Eingaben vornehmen (das Lesen aus einer Datei ist jedoch zulässig) und sollte nichts an STDOUT ausgeben. Die Ausgabe in eine Datei ist ebenfalls verboten.
  • Das Programm darf nichts nach STDERR schreiben.
  • Sie können auch eine Sprache (oder Sprachversion) verwenden, die neuer als diese Herausforderung ist. -Bitte beachten Sie, dass ein Dolmetscher vorhanden sein muss, damit die Einsendung getestet werden kann. Es ist erlaubt (und sogar empfohlen), diesen Dolmetscher für eine zuvor nicht implementierte Sprache selbst zu schreiben. : D
  • Einsendungen werden in Bytes in einer geeigneten (bereits vorhandenen) Codierung bewertet, normalerweise (aber nicht unbedingt) in UTF-8. Einige Sprachen, wie Ordner, sind etwas schwierig zu bewerten - im Zweifelsfall fragen Sie bitte bei Meta nach.
  • Hierbei geht es nicht darum, die Sprache mit dem kürzesten Endlosschleifenprogramm zu finden. Hier geht es darum, das kürzeste Endlosschleifenprogramm in jeder Sprache zu finden. Daher werde ich keine Antwort annehmen.
  • Wenn Ihre bevorzugte Sprache eine triviale Variante einer anderen (möglicherweise populäreren) Sprache ist, die bereits eine Antwort hat (denken Sie an BASIC- oder SQL-Dialekte, Unix-Shells oder triviale Brainf ** k-Derivate wie Alphuck), sollten Sie eine Anmerkung zur vorhandenen hinzufügen antworte, dass die gleiche oder eine sehr ähnliche Lösung auch in der anderen Sprache die kürzeste ist.
  • Es sollte eine Website wie Wikipedia, Esolangs oder GitHub für die Sprache geben. Wenn zum Beispiel die Sprache CJam ist, dann könnte man auf die Seite in der Kopfzeile verlinken wie #[CJam](http://sourceforge.net/p/cjam/wiki/Home/), X bytes.
  • Standardlücken sind nicht erlaubt.

(Ich habe einige dieser Regeln aus Martin Büttners "Hello World" -Herausforderung übernommen.)


Bitte zögern Sie nicht, in den Kommentaren zu schreiben, wie diese Herausforderung verbessert werden könnte.

Katalog

Dies ist ein Stack-Snippet, das sowohl einen alphabetischen Katalog der verwendeten Sprachen als auch eine allgemeine Bestenliste generiert. Um sicherzustellen, dass Ihre Antwort angezeigt wird, starten Sie sie bitte mit diesem Markdown-Header:

# Language name, X bytes

Offensichtlich ersetzen Language nameund X bytesmit den richtigen Gegenständen. Wenn Sie auf die Website der Sprachen verlinken möchten, verwenden Sie diese Vorlage wie oben angegeben:

#[Language name](http://link.to/the/language), X bytes

Zum Schluss noch ein Ausschnitt: (Klicken Sie auf "Ganze Seite", um eine bessere Ansicht zu erhalten.)

var QUESTION_ID=59347;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=41805;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"//api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"//api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang,user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase())return 1;if(a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase())return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:500px;float:left}#language-list{padding:10px;padding-right:40px;width:500px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>

Kühe quaken
quelle
41
Ich muss Programme mit einer negativen Byteanzahl veröffentlichen, um alle diese leeren Dateien zu besiegen!
CJ Dennis
3
Diese Herausforderung ist interessant, weil sie viele 0-Byte-Sprachen hervorbringt (von denen einige KEINE Esolangs sind). FWIW, die meisten deklarativen Sprachen haben eine implizite Endlosschleife, da deklarative Sprachen keine Schleifen in ihrer Syntax haben (sie gehen davon aus, dass sie in einer Endlosschleife ausgeführt werden). Kontaktplandiagramme gehören vielleicht zu den ältesten Sprachen dieser Art. Dann haben Sie die Instruction Language (IL), eine Art Assembly für SPS, die ebenfalls eine Endlosschleife einnimmt. ILs, wie die Montage, unterscheiden sich zwischen den Herstellern
slebetman
Sind Programme erlaubt, die ihren eigenen Quellcode lesen und ausführen, oder unterbricht die Datei-E / A die Regel, dass keine Eingabe erforderlich ist?
ThisSuitIsBlackNot
1
@ThisSuitIsBlackNot Ja, die Eingabe von Dateien ist zulässig.
Kühe quaken
Können Sie ""eine leere Zeichenfolge drucken ?
OldBunny2800

Antworten:

216

Befunge , 0 Bytes



Jep. Ein Befunge-Programm existiert in einem zweidimensionalen Spielfeld mit fester Größe, das sich um die Ränder wickelt. Mit nichts in diesem Raum zu stören, läuft der Programmzähler standardmäßig in einer Endlosschleife :)

daniero
quelle
10
Oh, ich wollte das posten. : /
Deusovi
5
@daniero Es kann eine Beziehung haben ... dieser Norm Schlupfloch . Ich persönlich bin mit der Standardlücke nicht einverstanden.
Justin
17
@Justin Diese Lücke gilt nur für bestimmte Arten von Herausforderungen.
Dennis
1
Sie können <pre>&nbsp;</pre>für einen leer aussehenden Codeblock verwenden.
immibis
Das erste,
wonach
150

L00P , 0 Bytes



Diese Sprache wurde für Looping gemacht und genau das wird es tun ...

Dennis
quelle
15
LOL. +1 für die Wahl der Sprache.
ETHproductions
76
... Eines Tages wird sich diese Sprache über dich ziehen
Pål GD
3
+1 für die musikalische Referenz und herzlichen Glückwunsch zu einem weiteren goldenen Abzeichen!
Luis Mendo
Die beste Referenz, die ich gesehen habe
Christopher
138

C64-Maschinencode , 2 Bytes

D0 FE

Verzweigt sich zu sich selbst, wenn das Null-Flag nicht gesetzt ist.

Zweige sind Einzelbyte-Offsets von der nächsten Befehlsstelle, und 254 ist -2 im Zweierkomplement ... Der BNE-Befehl (D0) benötigt ein Byte Speicher und der Offset ein zweites Byte, so dass zwei Bytes zurückverzweigt werden zu sich selbst. Das Null-Flag wird immer gelöscht, wenn Code in den Speicher geladen wird.

Beachten Sie, dass dies kein rekursiver Unterprogrammaufruf ist, sodass Ihnen niemals der Speicher ausgeht. Beachten Sie auch, dass es keinen Header, Compiler oder ausführbaren Overhead gibt ... es ist wirklich ein Zwei-Byte-Programm :)

James King
quelle
13
Sollte dies nicht auf jedem Computer mit einem Prozessor der 6502/6510-Familie funktionieren, nicht nur auf einem C64? Außerdem haben Sie Maschinencode geschrieben. Die Versammlung wäreBNE -2
Level River St
55
+1 für die Erstellung eines tatsächlichen Programms, das klein ist, anstatt zu versuchen, die dunkelste Sprache zu finden, die zufällig die wenigsten Zeichen enthält, um die Struktur darzustellen.
Knetic
1
@ user45891 EB FE ist x86. 6502/6510 hat keine bedingungslose Kurzsprunganweisung.
Random832
2
Steveverrill, touché, das ist in der Tat Maschinencode. Und ja, ich dachte, mehr Leute würden den Commodore 64 erkennen als die 65xx-Familie im Allgemeinen :) Der VIC-20 verwendete den 6502 und hätte dies ausführen können. Also, technisch gesehen, würde mein 1541-Diskettenlaufwerk ... Ich erinnere mich vage, dass ich den Controller darauf neu programmieren konnte. Ah, ich vermisse immer noch meinen C64 :)
James King
7
Früher bestand ein besonders übler "Trick" (Imho-Vandalismus), mit dem Kunden ahnungslose Besitzer von Computergeschäften belästigten, darin, zwei Bytes ähnlich wie beim X86 zu Beginn des Bootloaders mit DOS zu platzieren debug. Dadurch würde die Maschine effektiv gemauert, und den meisten Mitarbeitern fehlte das Wissen, dass es nicht nur eine tote Fahrt war.
Dewi Morgan
105

Brainfuck, 3 Bytes

+[]

Niemals dekrementieren, niemals enden.

mınxomaτ
quelle
62
Es ist lustig, wenn BF die meisten anderen Antworten schlägt.
Rohcana
Daran musste ich denken, als ich die Frage auf der Startseite von SE sah.
S3LPH
1
Mein erster Gedanke war BF! : D Es endete kürzer als ich dachte.
André Christoffer Andersen
1
Alternative, noch gleiche Bytes:-[]
Unihedron
1
Ich wette , es gibt irgendwo einen Dolmetscher , wo ]funktionieren würde
12Me21
102

/// , 3 Bytes

///

Gibt es Bonuspunkte für die Verwendung des Sprachnamens als Quellcode?

Dennis
quelle
71
Ich bin ehrlich überrascht, dass der Link tatsächlich funktioniert, da er mit endet ///;)
ETHproductions
@ETHproductions Das ist ziemlich überraschend, aber wenn man ein bisschen mehr darüber nachdenkt, macht es Sinn; Es ist nur die URLesolangs.org wiki _ _ _ _
HyperNeutrino
12
@AlexL. Nicht komplett. Der Webserver sieht eine GET-Anfrage an /wiki////. Während das sollte ein Weg sein, kann der Server mit dieser Information tun , was es will.
Dennis
73

Java , 53 Bytes

class A{public static void main(String[]a){for(;;);}}

Yay volle Programmanforderung!

Geobits
quelle
78
Gott ist so wortreich ...
mınxomaτ
4
@minxomat Ja, 45 Bytes für eine leere main:(
Geobits
3
@ Minxomat muss lieben, dass OOP
Luke
55
Das ist nicht OO. Das Einfügen von Code in eine Klasse macht sie nicht mehr zum OO als das Einfügen eines Steins in die Mikrowelle zum Essen.
Imallett
56

Prolog, 5 Bytes

a:-a.

Um festzustellen, ob das Prädikat awahr ist, müssen Sie nur prüfen, ob das Prädikat awahr ist.

Sie müssen die Datei laden und ausführen a, beide mit einem Befehlszeilenargument. Beachten Sie, dass die Rekursion wahrscheinlich als Endlosschleife optimiert ist und den Stapel nicht sprengen sollte.

Auch das sieht aus wie ein Smiley, aber ich bin nicht sicher, wie ich es nennen soll. Der Punkt sieht aus wie Speichel, also vielleicht "vegetativer Zustand" oder "Infiurierter Programmierer mit lockigem Haar". Vorschläge sind willkommen.

Core-Dump
quelle
3
Überprüfen Sie, ob aes wahr ist, indem Sie überprüfen, ob aes wahr ist, indem Sie überprüfen, ob aes wahr ist.
kirbyfan64sos
50

Haskell , 9 Bytes

Endlose Rekursion der Hauptfunktion. Sollte aufgrund der Optimierung der Schwanzrekursion zu einer Schleife kompiliert werden.

main=main
Gewähren
quelle
1
Es kompiliert, aber wenn es ausgeführt wird, erkennt das Laufzeitsystem die Schleife und löst die <<loop>>Ausnahme aus - zumindest mit ghc. Möglicherweise verhält sich ein anderer Compiler anders.
nimi
4
Doing runhaskell Loop.hsausgeführt es glücklich für einige Minuten auf meinem Rechner. Zumindest kann es von einem Dolmetscher ausgeführt werden. Ich denke, die <<loop>>Laufzeitausnahme, die ghcausgelöst wird , ist lediglich ein Implementierungsdetail der Laufzeit und nicht Teil der Haskell-Sprache, wie in einem der Haskell-Berichte angegeben.
GrantS
Es ist ein Randfall. runhaskellAkzeptiert gerne den Code, aber es wird keine Schleife ausgeführt. Es macht nichts. Die Herausforderung besteht jedoch nur darin, die Schleife zu erstellen und nicht auszuführen. Ich denke, das ist in Ordnung. Habe eine +1.
nimi
@GrantS: Die Haskell-Sprache kennt keine „Schleife“. Definitionen wie main = mainsind semantisch im selben Bucket wie undefinedoder error "<<loop>>": bottom values ​​⟂.
aufgehört, gegen den Uhrzeigersinn
1
Ich denke, die kürzeste funktionierende Haskell-Schleife wäre:main=main>>main
Lovasoa
43

Python, 9 Bytes

Funktioniert sowohl in 2 als auch in 3.

while 1:0

Verkürzt von @FryAmTheEggman

Ruth Franklin
quelle
Beachten Sie, dass dies zu einer Ausgabe führt, wenn es im Python-Interpreter ausgeführt wird
Chris_Rands
2
@ Chris_Rands Nur in der REPL.
HyperNeutrino
40

x86 ELF ausführbar, 45 Bytes

Im Gegensatz zur überwiegenden Mehrheit dieser Antworten handelt es sich hierbei um ein wirklich vollständiges Programm, wie es bei einem freistehenden ausführbaren Programm der Fall ist.

00000000: 7f45 4c46 0100 0000 0000 0000 0000 0100  .ELF............
00000010: 0200 0300 2000 0100 2000 0100 0400 0000  .... ... .......
00000020: ebfe 31c0 40cd 8000 3400 2000 01         [email protected]. ..

Die Eingeweide des Programms liegen bei Byte 0x20 ebfe, was in einer anderen Antwort als das kleinste NASM-Programm bezeichnet wird. Wenn Sie dies jedoch mit NASM zusammenstellen, erhalten Sie eine ausführbare Datei mit Tausenden von nicht benötigten Bytes. Wir können die meisten von ihnen mit der Technik skizziert loszuwerden hier . Sie können feststellen, dass dieses Programm nicht einmal so groß ist wie der ELF-Header! Dieses Bit des ausführbaren Golfspiels verfälscht den ELF-Header und den Programm-Header, sodass sie die gleichen Bytes in der Datei belegen können, und fügt unser Programm in einige nicht verwendete Bytes innerhalb des Headers ein. Linux liest den Header immer noch gerne und startet die Ausführung an der Stelle, 0x20an der er sich für immer dreht.

casey
quelle
9
.comauf DOS wäre viel kürzer :)
JimmyB
1
Sie erhalten nur "Tausende" Bytes, wenn Sie gcc die Startdateien einschließen lassen. yasm && ldmacht ausführbare Dateien nur ca. 1k.
Peter Cordes
37

INTERCAL, 42 18 Bytes

(1)DO COME FROM(1)

Idee aus dem Kommentar von @ flawr.

EDIT: Heiliger Mist, INTERCAL ist eigentlich kürzer als C #. Ich weiß nicht, ob das jemals zuvor passiert ist ...

42-Byte-Version

DO(1)NEXT
(1)DO FORGET #1
PLEASE DO(1)NEXT
kirbyfan64sos
quelle
12
Wie kannst du es wagen, ein interkales Programm ohnecomefrom
flawr
1
@ Fehler behoben. ;)
kirbyfan64sos
4
Np, ich denke wir brauchen mehr Intercal in
Golfwettbewerben
16
Hast du gesagt PLEASE?
Daniel M.
34

Perl , 6 Bytes

perl -e '{redo}'

Von perldoc -f redo:

Der Befehl redo startet den Schleifenblock neu, ohne die Bedingung erneut auszuwerten. Beachten Sie, dass ein Block für sich genommen semantisch mit einer Schleife identisch ist, die einmal ausgeführt wird. Somit wird Redo in einem solchen Block effektiv zu einem Schleifenkonstrukt.

Ich sehe es nicht redozu oft im Seriencode, aber es ist großartig für Golf! Vergleichen Sie die oben auf den kürzesten Äquivalente for, whileund goto:

for(;;){} # 9 bytes
1while 1  # 8 bytes
X:goto X  # 8 bytes
ThisSuitIsBlackNot
quelle
1
codegolf.stackexchange.com/a/59553/30206 schlägt das 4-Byte vor do$0, das nicht als Einzeiler funktioniert perl -e.
Peter Cordes
@PeterCordes Ordentlich, obwohl ich denke, dass die Regel "keine Eingabe nehmen muss" bricht. do EXPRliest aus einer Datei.
ThisSuitIsBlackNot
32

> <> , 1 Byte

 

Ein einzelnes Leerzeichen führt dazu, dass> <> in eine Endlosschleife von NOPs gerät

Andere gültige Einzelzeichenprogramme (ohne Speicherbedarf) sind wie folgt:

>^v</\|_#x!"'{}r

Außerdem besagen die Regeln, dass in Ihrem Programm möglicherweise nicht genügend Speicher vorhanden ist. In diesem Fall können der Liste der gültigen 1-Byte-Programme die folgenden Zeichen hinzugefügt werden:

01234567890abcdefli
Fongoid
quelle
11
Versuchen Sie es ` `mit dem Codeblock.
TheNumberOne
2
Warum nicht einfach benutzen >?
mbomb007
4
Wenn dies Chem.SE wäre, würde ich empfehlen, den Code auch in MathJax zu platzieren.
hBy2Py
Sind wir sicher, dass ein leeres Programm keine Endlosschleife ist?
Aaron
1
Runtime-Fehler beim Versuch, das leere Programm auszuführen: Traceback (letzter Aufruf zuletzt): Datei "fish.py", Zeile 493, in <Modul> instr = interpreter.move () Datei "fish.py", Zeile 149, in move if self._position [1]> max (self._codebox.keys ()): ValueError: max () arg ist eine leere Sequenz
Fongoid 06.10.15
31

Motorola MC14500B Maschinencode , 0,5 0 Byte



Erläuterung

Gemäß dem Handbuch ist das System so konfiguriert, dass es eine Schleifensteuerungsstruktur aufweist. Der Programmzähler zählt bis zu seinem höchsten Wert, springt auf Null zurück und zählt wieder hoch.

Zach Gates
quelle
3
Ich glaube, Sie haben die ultimative Golfsprache gefunden, zumindest für kleine Aufgaben ... nicht einmal Pyth kommt so kurz. +1
ETHproductions
Seien Sie gewarnt, dass dies als 5 Bytes auf der Anzeigetafel angezeigt wird.
Addison Crump
C ist Jump, aber wo soll man springen?
Kishan Kumar
3
Wow, du magst diese Sprache wirklich? : P
MD XF
Dies funktioniert in jeder Maschinensprache, in der 0 eine NOP ist, der Anweisungszeiger einen Zeilenumbruch ausführt und der Programmspeicher keine zusätzlichen Daten enthält.
12. Mai, 21.
30

LOLCODE , 24 Bytes

IM IN YR X
IM OUTTA YR X
daniero
quelle
3
In vielen LOLCODE Dolmetscher, wie die auf repl.it, HAIund KTHXBYEsind nicht erforderlich.
Alex A.
1
@AlexA. Oh, das wusste ich nicht. Vielen Dank.
Daniero
29

C, 15 Bytes

main(){main();}

Ja, es ist möglich, main()rekursiv aufzurufen . Wenn Sie einen Compiler haben, der die Tail-Call-Optimierung -O2ausführt (z. B. gcc mit der Option), ist er nicht einmal fehlerfrei: Der Compiler ist intelligent genug, um den Funktionsaufruf in einen zu verwandeln goto.

Kennzeichen
quelle
4
Sofern Sie mir keinen Compiler geben können, der dies standardmäßig ausführt, müssten Sie 3 Bytes für die -O2Option hinzufügen .
LegionMammal978
19
@ LegionMammal978 Nach den Regeln in der Challenge ist es akzeptabel, dass nicht genügend Speicher vorhanden ist. Das macht die -O2Optimierung eher zu einem "nice-to-have" als zu einer Anforderung.
Mark
1
Wenn Optionen für den Compiler zulässig sind (und nicht für die Lösungsanzahl gezählt werden), ändern Sie den Code in l(){l();}und kompilieren Sie ihn mit den Optionen-Dl=main -O2
wendelbsilva
1
Zum Vergleich ist die kürzeste nichtrekursiven richtige Schleifenimplementierung 16B: main(){for(;;);}.
Peter Cordes
3
@wendelbsilva Sie können es noch mehr nageln, indem Sie den Code in X (nur ein Byte) ändern und mit -DX = main () {main ();} kompilieren
LeFauve
26

Labyrinth , 1 Byte

"

Ein Labrinth-Programm führt dieselbe Anweisung immer wieder aus, wenn keine Nachbarn vorhanden sind. Sie werden auch nicht enden, bis sie die @Anweisung ausführen .

Die Nummer eins
quelle
25

Vim , 7 Tastenanschläge

Öffnen Sie den Editor, vorzugsweise ohne geladene Skripte, zum Beispiel so über die Befehlszeile: vim -u NONE

qq@qq@q

Vimscript, fünfzehn 8 Bytes

Fügen Sie es in ein Skript ein oder führen Sie es direkt aus, indem :Sie im normalen Modus zuerst den Doppelpunkt ( ) drücken

wh1|endw
daniero
quelle
1
Ihr Vimscript ist etwas langwh1|endw
FDinoff
Können Sie jemandem erklären, der nicht mit Vim vertraut ist, wie das funktioniert?
iFreilicht
8
@iFreilicht qqstartet die Aufnahme in den qPuffer. @qGibt wieder, was sich im qPuffer befindet (an dieser Stelle nichts). qstoppt die Aufnahme und gibt dann wieder, @qwas sich im qPuffer befindet. Dies sind zu diesem Zeitpunkt die Tastenanschläge @q. Also @qWiederholungen @qWiederholungen @q.... auch, wenn qich so viele schreibe, schmerzt mein Gehirn.
Wayne Werner
25

Netzhaut , 3 Bytes

+`0

Wenn eine einzelne Datei angegeben wird, verwendet Retina eine Zählstufe und ersetzt die Eingabe durch die Anzahl der Übereinstimmungen, die für die angegebene Regex gefunden wurden. Hier ist der Regex 0. Jetzt wird +die Bühne so lange wiederholt, wie sich das Ergebnis gegenüber der vorherigen Iteration ändert. Was genau passiert also?

  • 0wird mit der leeren Eingabe abgeglichen und ergibt null Übereinstimmungen. Das Ergebnis ist also 0. Dies unterscheidet sich von der Eingabe, daher führen wir dies erneut aus.
  • 0wird mit der vorherigen Ausgabe abgeglichen 0, die jetzt eine Übereinstimmung ergibt ... das Ergebnis ist also 1.
  • 0wird mit der vorherigen Ausgabe abgeglichen 1, was fehlschlägt ... das Ergebnis ist also 0.
  • ... Du hast die Idee.

Das Ergebnis der Schleifeniteration wechselt zwischen 0und 1, was a) sicherstellt, dass die Schleife nie beendet wird und b) sicherstellt, dass uns nicht der Speicher ausgeht, da die Zeichenfolge nicht wächst.

Standardmäßig gibt Retina nur aus, wenn das Programm beendet wird, sodass nichts gedruckt wird (Sie können dieses Verhalten ändern, indem Sie ein >nach dem hinzufügen +, wodurch die abwechselnden Nullen und Einsen gedruckt werden ).

Seit 1.0 hat Retina auch traditionellere while-Schleifen, die Sie mit einer einfacheren Stufe verwenden können (bei der die Zeichenfolge nicht ständig geändert wird), für die jedoch tatsächlich mehr Bytes erforderlich sind. Eine Option wäre:

//+`
Martin Ender
quelle
1
Wow, ich habe gerade genau das Gleiche in rs beantwortet .
kirbyfan64sos
1
@ kirbyfan64sos Sie sehen sehr ähnlich aus, funktionieren aber tatsächlich ganz anders. :)
Martin Ender
Gute Arbeit. Ich wollte versuchen, das kürzeste Retina-Programm im Ersetzungsmodus auszuführen. Ich bin neugierig, kann +`leere Eingaben wiederholt abgleichen?
mbomb007
@ mbomb007 Ich denke das würde mit einem 2nach ein paar Iterationen enden .
Martin Ender
24

BASIC (QBasic 4.5), 10 5 3 Bytes

In der Programmiersprache BASIC wird RUN verwendet, um die Programmausführung aus dem Direktmodus heraus zu starten oder um ein Überlagerungsprogramm aus einem Ladeprogramm heraus zu starten. - Wikipedia

Bearbeiten: Dies funktioniert in QBasic 4.5 laut @steenbergh ohne Zeilennummer

RUN

Hier ist die erste Version, die ich gepostet habe. Endlosschleife GOTO. Außerdem sind es 10 Bytes, was ein schöner Zufall ist!

10 GOTO 10
mbomb007
quelle
13
Warum Zeilennummer 10? Warum nicht 9?
rekursiver
25
oder 8 für 8 Bytes? :)
MickyT
3
Es wird nicht gewinnen und es ist auf diese Weise lustiger.
CJ Dennis
3
Dies könnte kurzgeschlossen werden mit: 1 RUN
TOOGAM
2
@davidjwest Das Kürzeste, was ich in Sinclair BASIC machen kann, ist: 1 GOTO SIGNUM PI- Da konstante Ints zweimal als Shorts gespeichert werden, würde 1 4 Bytes betragen, aber SIGNUM und PI verwenden jeweils nur ein Byte. Ah, die alten Codierungstricks, die wir verwendet haben: D Ich bin mir nicht sicher, wie viel Speicher die Zeilennummern in Anspruch nehmen, also kann ich nur sagen, dass es 3+ (Zeilennummernspeicher) Bytes sind.
Dewi Morgan
23

TIS-Knotentyp T21-Architektur, 6 Byte

Ein einzelner Knoten mit NOP

Tessellated Intelligence System-Knoten werden als "Verarbeitungs-" oder "Speicherknoten" klassifiziert. Speicherknoten speichern und rufen einfach Informationen ab und sind in diesem Fall irrelevant. Übrig bleiben die Verarbeitungsknoten. Der Knotentyp T21 (Basic Execution Node) ist der gebräuchlichste und einfachste (wie der Name vermuten lässt).

Technisch gesehen kann jeder Knoten als unabhängiger Computer betrachtet werden. Beim T21 handelt es sich um einen Computer mit zwei Speicherregistern (eines adressierbar, eines nicht) und einem Befehlssatz von 15 Befehlen. Es verfügt über genügend Speicher, um mit bis zu 15 Anweisungen programmiert zu werden. Alle TIS-Knoten verfügen über vier Ports, die sie mit den topologisch benachbarten Knoten verbinden. Das Lesen von einem Port bewirkt, dass dieser Knoten hängt, bis der Knoten am anderen Ende darauf schreibt, und das Schreiben an einen Port hängt, bis dieser Knoten es liest.

Möglicherweise können Sie jetzt feststellen, dass TIS-Knoten niemals dazu gedacht waren, selbst viel zu tun. Zusammen können sie jedoch ziemlich mächtig sein ... nun, für ihre Zeit. Aufgrund dieser Einschränkungen ist es sehr selten, dass jemand nur einen einzigen Knoten verwendet. In der Tat, ein Programm , das eine Eingabe nimmt und liefert Ausgangs basierend auf es müssen mindestens drei Knoten verwenden, wie TIS Systeme Eingang in den Einzugs UPPort eines Knotens in der oberen Reihe und von dem nehmen Ausgabe DOWNPort eines Knotens in der unteren Reihe. Es gibt drei Zeilen, sodass Daten mindestens drei Knoten passieren müssen, um nach unten zu gelangen.

Aufgrund dieser Einschränkungen sollen TIS-Knoten im Allgemeinen in etwa wie folgt verwendet werden:

  1. Holen Sie sich eine Eingabe
  2. Tu etwas dagegen
  3. Weitergeben
  4. Kehren Sie zu Schritt 1 zurück

Aufgrund des begrenzten Platzes für Anweisungen und der Tatsache, dass Knoten einfach leise warten und keine Probleme beim Lesen von nicht vorhandenen Eingaben verursachen, wurde in ihrem Design eine Entscheidung getroffen, die sie für diese Herausforderung sehr gut macht. Ich zitiere aus dem Referenzhandbuch des TIS-100:

Nach Ausführung der letzten Anweisung des Programms wird die Ausführung automatisch mit der ersten Anweisung fortgesetzt.

Perfekt! Endlosschleifen sind Standard für TIS-Knoten.

Ich habe diese Frage fast mit einer 0-Byte-Antwort beantwortet und behauptet, ein leerer Knoten sei eine Endlosschleife. Ich recherchierte jedoch weiter. Erstens besagt das obige Zitat, dass die Schleife nach dem Ausführen des letzten Befehls auftritt . Zusätzlich habe ich die Implementierung getestet. Jeder Knoten meldet zu jeder Zeit einen "Modus". Es ist nicht programmgesteuert verfügbar, soll jedoch das Debuggen vereinfachen. Hier sind die möglichen Modi:

 RUN‌ - I am executing an instruction.
READ - I am reading from a port, waiting for it to be written to.
WRTE - I am writing to a port, waiting for it to be read from.
IDLE - I am doing nothing.

Es stellt sich heraus, dass jeder Knoten, da er ein einzelner Computer ist, bestimmen kann, ob er Befehle ausführen muss oder nicht. Wenn nicht, bleiben sie im IDLEStatus (spart wahrscheinlich Strom). Als solches konnte ich nicht guten Gewissens behaupten, dass es sich um eine "Schleife" handelte; Vielmehr saß jeder Knoten ruhig da und ging davon aus, dass die anderen etwas Wichtiges taten.

Dieses Programm, das ich eingereicht habe, ist wirklich eine Endlosschleife, da die Ausführung den Status des Knotens auf "" setzt RUN. Es ist so einfach , wie man es erwarten würde, NOPführt No OPmenarbeit. Sobald es nichts getan tut, kehrt zum Anfang des Codes: NOP.

Wenn Sie es finden unbefriedigenden , dass ich die T21 - Architektur bin missbrauchen um eine Schleife zu schaffen, biete ich eine alternative Lösung auf Kosten von 2 Bytes: JRO 0. JRObedeutet Jump Relative Obedingungslos. Oder so etwas, denke ich. Es gibt keine vereinbarte erweiterte Form der Anweisungen. Nimmt jedenfalls JROein numerisches Argument und überspringt die Ausführung relativ zur aktuellen Position um diesen Betrag. Überspringt beispielsweise JRO 2die darauf folgende Anweisung (nützlich, wenn von einer anderen Stelle zu dieser Anweisung gesprungen wird). JRO 1Springt eine Anweisung vorwärts und macht sie zu einer NOP. JRO -1Springt einen Befehl zurück und führt den vorherigen Befehl alle zwei Zyklen aus, bis das Programm angehalten wird. Und natürlich,JRO 0 springt zu sich selbst und führt sich für immer aus.

An diesem Punkt denken Sie vielleicht:

Klar, Einschienenbahn, das alles macht Sinn, aber Ihre Antwort ist einfach NOP. Warum ist seine Punktzahl 6 Bytes?

Gute Frage, danke fürs Fragen. Man könnte naiv denken, dass TIS-Programme genauso gezählt werden sollten, wie wir Programme in mehreren Dateien zählen: die Anzahl der Bytes in allen Knoten plus 1 Byte für jeden weiteren Knoten nach dem ersten. Die TIS-Golfgemeinschaft entschied jedoch, dass dies aus dem einfachen Grund ungerecht wäre, weil einige der Informationen, die für die Neuerstellung von Lösungen erforderlich sind, ignoriert werden. Die Nachbarn eines Knotens sind sehr wichtig, und diese Bewertungsmethode gibt Ihnen kostenlose Positionsinformationen. Stattdessen haben wir das Format übernommen, das vom gängigsten TIS-Emulator verwendet wird, dem verwirrend benannten TIS-100. (Randnotiz: Bitte benennen Sie Emulatoren nicht nach dem System, das sie emulieren. Es ist nicht klug, es ist nur ärgerlich und jeder muss ständig klarstellen, wovon er spricht.) Ganz einfach: Die 12 Knoten eines TIS-100 Die Geräte sind von links nach rechts und von oben nach unten nummeriert und überspringen alle Speicherknoten, die das emulierte System installiert hat. Ein Knoten numeriert Nenthält # CODE\n# CODE\n CODEist wie so gespeichert:

@N
# CODE
# CODE
# CODE

Und so wird ein Knoten mit der Nummer 0, der enthält, NOPgemäß seiner Darstellung in diesem Format bewertet:

@0
NOP

Sechs Bytes.

Da meine Antworten häufig in visuell interessanten Sprachen verfasst sind, können Sie dem TIS-100-Emulator bei der Ausführung dieses Programms auf YouTube zusehen . Wenn man bedenkt, was diese Herausforderung ist, weiß ich nicht, was Sie erwarten ...

untergrundbahn
quelle
Wow-ee. Das war erstaunlich.
Adrian Zhang
Ich habe immer davon ausgegangen , JROstand für J ump bis R Elativ O ffset.
MutantOctopus
@BHustus Ich glaube, Sie haben Recht, aber ich habe dies geschrieben, bevor ich Erfahrung mit einer anderen Assemblersprache hatte, und ich kannte den Jargon nicht
undergroundmonorail
Ich wünschte, ich könnte diese Antwort +10. Ich liebe TIS-100
Shirkam
Ich habe einen eigenen TIS-Emulator geschrieben, sodass Sie ihn jetzt online testen können . Erwarten Sie jedoch nicht viel anderes als eine Auszeit.
Phlarx
22

C # , 38 37 36 Bytes

class B{static int Main(){for(;;);}}

Für Schleife ohne Haltebedingung.

Die Rückkehr von main sollte ein int sein, aber da es niemals das Ende erreichen wird, sollte dies kompiliert werden. (Getestet in VS 2015 und 2013, funktioniert auch in Ideone ). Danke Geobits und MichaelS .

Eine kürzere Version, 35 Bytes, kann erreicht werden, aber Drucke, von Process is terminated due to StackOverflowExceptiondenen ich glaube, dass sie den dritten Punkt verletzen, nichts nach stderr zu drucken. Dank an MichaelB

class B{static int Main()=>Main();}
Sven schreibt Code
quelle
1
Können Sie eine speichern, indem Sie ;anstelle von verwenden {}? Ich würde testen, aber Online-Dienste mögen keine Endlosschleifen.
Geobits
@ Geobits Ah, ja. Wie so einfache Dinge vorbeiziehen.
Sven schreibt den Code
1
Es kann vom Compiler abhängen, aber ich habe ein anderes Zeichen gespeichert, indem ich es als int main deklariert habe, und es wurde ohne return-Anweisung ausgeführt. Ich verwende Microsoft Visual C # 2013-Community, Version 12.0.31101.00, Update 4. "Klasse A {static int Main () {für (;;);}}"
MichaelS
@MichaelS Danke! Arbeitete 2015 VS für mich.
Sven schreibt den Code
1
In vs 15 könnte dies kürzer sein (kaum). 35class B{static int Main()=>Main();}
Michael B
21

Foo, 3 Bytes

(1)

Jedermanns Lieblingsprogrammiersprache! : D

kirbyfan64sos
quelle
20

Hexagony , 1 Byte

.

Ich weiß nicht viel über diese großartige Sprache, die von @ MartinBüttner erstellt wurde, aber nach allem, was ich gesehen habe, sollte sich diese endlos wiederholen, da es kein Hindernis gibt @, das Programm anzuhalten . .ist einfach ein No-Op.

ETHproductions
quelle
3
Warum testen Sie es nicht
?
7
Ich kann bestätigen, dass dies korrekt ist. :)
Martin Ender
@KritixiLithos Weil ich keinen Online-Dolmetscher gefunden habe und es nicht vorziehen würde, den Dolmetscher für jede Sprache herunterzuladen, die ich jemals testen möchte. ;)
ETHproductions
16
@ETHproductions Du nicht? Huh.
Martin Ender
1
TIO zeigt, dass ein leeres Programm funktioniert .
Weijun Zhou
20

Perl, 4 Bytes

do$0

Führt sich wiederholt aus.

Lynn
quelle
1
Sehr cool. Zuerst dachte ich, dies verstoße gegen die Regel "Keine Eingabe erforderlich", da do EXPRaus einer Datei gelesen wird, was technisch gesehen eine Eingabe wäre, aber das OP stellte klar, dass Datei-E / A akzeptabel ist. Das wirklich Coole ist, dass dies im Gegensatz zu der Entsprechung in Bash keine neuen Prozesse auslöst und somit unbegrenzt fortgesetzt wird, ohne dass Speicher- oder Prozessgrenzen überschritten werden.
ThisSuitIsBlackNot
18

Gammaplex , 0 Bytes

In Gammaplex ist es nicht möglich, ein Programm zu schreiben, das keine Endlosschleife ist. Also schreibe ich einfach ein Programm, das keine Eingabe / Ausgabe verwendet.

jimmy23013
quelle
Nun, die Regeln besagen, dass es eine Endlosschleife geben muss, um sich zu qualifizieren.
Arodebaugh
@ Arodebaugh gibt es. Mit anderen Worten, in jedem Gammaplex-Programm gibt es eine Endlosschleife.
Jimmy23013
16

Pyth, 2 Bytes

# 

Pyth erwartet Token nach dem Forever-Operator. (Das ist ein Leerzeichen.)

Blau
quelle
16

Bash + BSD Coreutils, 23 22 14 6 5 6 Bytes

yes>&-

yesgibt "y" für immer aus; >&-schließt STDOUT.

Vielen Dank an @Dennis und @ThisSuitIsBlackNot für die Hilfe bei der Größenreduzierung!

Ben
quelle
4
Mit bash können Sie einfach $0ein Shellscript erstellen und ausführen, es ruft sich für immer auf.
TessellatingHeckler
1
Kreativ, aber langweilig alt while :;do :;donesind nur 17 Bytes.
ThisSuitIsBlackNot
3
ping>&- 0funktioniert unter Linux, wobei 0localhost zugeordnet ist.
Dennis
1
yes! (Ich habe überlegt, yesaber es ist mir nicht yes>/dev/null
eingefallen,
3
Das war mir nicht bewusst. Wenn es mit BSD funktioniert, ja, großartig, aber ich denke nicht, dass das Schreiben in eine Datei mit dem Produzieren keiner Ausgabe übereinstimmt .
Dennis
15

Common Lisp, 6 Zeichen

(loop)
Core-Dump
quelle
44
Gibt es so etwas wie Rare Lisp ?
Fehler
10
@flawr Ich nehme an, es war nur ein humorvoller Kommentar, aber Common Lisp ist das Ergebnis eines Standardisierungsprozesses, der eine Reihe von meistens, aber nicht ganz kompatiblen Sprachen in der Lisp-Familie vereint. Sprachen in der Lisp-Familie, die nicht Common Lisp sind, umfassen Scheme, Racket, Emacs Lisp und Clojure.
Joshua Taylor
Auch (ein bisschen länger, aber wenn wir nicht Pars zählen müssen, wäre es nur zwei Bytes): (do()(())).
Joshua Taylor
@JoshuaTaylor Ich habe auch darüber nachgedacht do, den Leser in eine Endlosschleife zu bringen, aber ich verstehe nicht, wie ich es in Kürze machen soll. Es scheint, dass nichts schlägt (loop).
Coredump
@JoshuaTaylor, wenn Sie Parens Lisp nicht gezählt haben, wäre die Golf-Sprache von allen
Cyoce
13

Spaltung , 1 Byte

Es gibt genau 4 Ein-Byte-Lösungen:

R
L
U
D

Diese vier Buchstaben zeigen an, dass ein Atom dort beginnt (in der entsprechenden Richtung). Eine davon ist erforderlich, da das Programm ohne Atom sofort beendet wird. Da der Quellcode nur ein Zeichen groß ist, wird das Atom sofort umgebrochen und dieselbe Zelle erneut ausgeführt. Nach dem Start des Programms wird jedoch UDLReinfach ein eingehendes Atom in die entsprechende Richtung abgelenkt, sodass es in diesem Fall zu No-Ops wird.

Martin Ender
quelle