Eine der häufigsten Standardaufgaben (insbesondere bei der Präsentation von esoterischen Programmiersprachen) ist die Implementierung eines "cat-Programms" : Lesen Sie STDIN vollständig aus und drucken Sie es in STDOUT aus. Obwohl dies nach dem Unix-Shell-Dienstprogramm benannt ist cat
, ist es natürlich viel weniger leistungsfähig als das Original, das normalerweise zum Drucken (und Verketten) mehrerer von der Disc gelesener Dateien verwendet wird.
Aufgabe
Sie sollten ein vollständiges Programm schreiben , das den Inhalt des Standardeingabestreams liest und ihn wörtlich in den Standardausgabestream schreibt. Wenn und nur dann, wenn Ihre Sprache keine Standardeingabe- und / oder -ausgabestreams unterstützt (wie in den meisten Sprachen verstanden), können Sie diese Begriffe stattdessen so verstehen, dass sie in Ihrer Sprache am ähnlichsten sind (z. B. JavaScript prompt
und alert
). Dies sind die einzigen zulässigen E / A-Formen, da jede andere Schnittstelle die Art der Aufgabe erheblich verändern und die Vergleichbarkeit der Antworten erheblich beeinträchtigen würde.
Die Ausgabe sollte genau die Eingabe enthalten und sonst nichts . Die einzige Ausnahme von dieser Regel ist die konstante Ausgabe des Interpreters Ihrer Sprache, die nicht unterdrückt werden kann, z. B. eine Begrüßung, ANSI-Farbcodes oder Einrückungen. Dies gilt auch für nachfolgende Zeilenumbrüche. Wenn die Eingabe keine nachgestellte Zeile enthält, sollte die Ausgabe auch keine enthalten! (Die einzige Ausnahme ist, wenn Ihre Sprache nach der Ausführung immer eine abschließende neue Zeile ausgibt.)
Die Ausgabe in den Standardfehlerstrom wird ignoriert, solange der Standardausgabestrom die erwartete Ausgabe enthält. Dies bedeutet insbesondere, dass Ihr Programm beim Erreichen des Endes des Streams (EOF) mit einem Fehler beendet werden kann, sofern der Standardausgabestream nicht verschmutzt wird. In diesem Fall empfehle ich Ihnen, Ihrer Antwort ebenfalls eine fehlerfreie Version hinzuzufügen (als Referenz).
Da dies eine Herausforderung für jede Sprache und nicht für jede Sprache darstellt, gibt es einige sprachspezifische Regeln:
- Wenn es in Ihrer Sprache überhaupt möglich ist, Nullbytes im Standardeingabestream von der EOF zu unterscheiden, muss Ihr Programm Nullbytes wie alle anderen Bytes unterstützen (dh, sie müssen auch in den Standardausgabestream geschrieben werden).
- Wenn es in Ihrer Sprache überhaupt möglich ist, einen beliebigen unendlichen Eingabestream zu unterstützen (dh wenn Sie vor dem Drücken von EOF in der Eingabe mit dem Drucken von Bytes an die Ausgabe beginnen können), muss Ihr Programm in diesem Fall ordnungsgemäß funktionieren. Als Beispiel
yes | tr -d \\n | ./my_cat
soll ein unendlicher Strom vony
s ausgegeben werden. Es liegt an Ihnen, wie oft Sie den Standardausgabestream drucken und leeren, es muss jedoch garantiert sein, dass er nach einer begrenzten Zeitspanne unabhängig vom Stream erfolgt (dies bedeutet insbesondere, dass Sie nicht auf ein bestimmtes Zeichen wie warten können einen Zeilenvorschub vor dem Drucken).
Fügen Sie Ihrer Antwort einen Hinweis zum genauen Verhalten in Bezug auf Null-Bytes, unendliche Streams und irrelevante Ausgaben hinzu.
Zusätzliche Regeln
Hier geht es nicht darum, die Sprache mit der kürzesten Lösung dafür zu finden (es gibt einige, bei denen das leere Programm den Trick macht) - hier geht es darum, die kürzeste Lösung in jeder Sprache zu finden. Daher wird keine Antwort als angenommen markiert.
Einsendungen in den meisten Sprachen 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 bitte nach Meta fragen .
Sie können auch eine Sprache (oder Sprachversion) verwenden, die neuer als diese Herausforderung ist. Sprachen, die speziell geschrieben wurden, um eine 0-Byte-Antwort auf diese Herausforderung zu senden, sind fair, aber nicht besonders interessant.
Beachten Sie, dass ein Dolmetscher vorhanden sein muss, damit die Einreichung getestet werden kann. Es ist erlaubt (und sogar empfohlen), diesen Dolmetscher für eine zuvor nicht implementierte Sprache selbst zu schreiben.
Beachten Sie auch , dass Sprachen Sie müssen erfüllen unsere üblichen Kriterien für Programmiersprachen .
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 Brainfuck-Derivate wie Headsecks oder Unary), sollten Sie der vorhandenen Antwort eine Anmerkung hinzufügen Die gleiche oder eine sehr ähnliche Lösung ist auch in der anderen Sprache die kürzeste.
Sofern sie nicht zuvor außer Kraft gesetzt wurden, gelten alle Standardregeln für Code-Golf , einschließlich der http://meta.codegolf.stackexchange.com/q/1061 .
Bitte stimmen Sie langweiligen (aber gültigen) Antworten in Sprachen nicht ab, in denen es nicht viel zum Golfen gibt. Diese sind für diese Frage nach wie vor hilfreich, da versucht wird, einen Katalog so vollständig wie möglich zusammenzustellen. Stimmen Sie Antworten jedoch in erster Linie in Sprachen ab, in denen sich der Autor tatsächlich um das Golfen des Codes bemühen musste.
Katalog
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sh
Antwort mit, cat
die auch eine kürzere Lösung mit enthält dd
.)
cat