Aufgabe
Lesen Sie einen möglicherweise unendlichen Textstrom oder eine Datei ein und geben Sie den Inhalt aus, bis das Wort hello
ausgegeben wurde. Beachten Sie dabei die folgenden Regeln.
Nach
hello
der Ausgabe sollte Ihr Code sofort beendet werden. Es sollte beispielsweise nicht auf eine neue Zeile warten.Ihr Code sollte so wie er ist ausgegeben werden. Das heißt, es sollte nicht zu viele Eingaben einlesen und dann mit der Ausgabe beginnen.
Wenn der Stream / die Datei keine enthält
hello
, sollte Ihr Code die Eingabe nur für immer oder bis zum Ende des Streams / der Datei ausgeben.Dies ist eine case sensitive Herausforderung, also
hello
nicht gleichHello
.Sie können davon ausgehen, dass die Eingabe ausschließlich aus druckbaren ASCII-Zeichen und Zeilenumbrüchen besteht.
Ihr Code kann nicht erwarten, dass der Text durch eine neue Zeile abgeschlossen wird oder dass die Eingabe überhaupt neue Zeilen enthält. Außerdem können Sie nicht davon ausgehen, dass der Code auf einem Computer mit unendlich viel Speicher ausgeführt wird.
Sie können davon ausgehen, dass Ihr Code aus einem leeren Verzeichnis aufgerufen wird.
Beispiel für einen Eingabestream
I once had a horse called hellopina.
Ausgabe
I once had a horse called hello
Spitze
Führen Sie es aus yes | tr -d \\n | <your program>
, um zu überprüfen, ob es mit unendlichen Streams funktioniert. Wenn nichts gedruckt wird und / oder Speicherplatz verloren geht, stimmt das Programm nicht mit der Spezifikation überein. Es sollte yyyyyyyyyyyyyyyyyyyyyy...
für immer ohne Zeilenumbrüche gedruckt werden.
Antworten:
Gelee , 24 Bytes
Probieren Sie es online!
Erläuterung:
quelle
C (gcc) ,
8180767572717069 BytesProbieren Sie es online!
Wie es funktioniert
Dies ist ein volles Programm. Wir definieren eine Funktion f für unsere Zwecke. Um Bytes zu sparen, wird mit zwei Argumenten deklariert, die standardmäßig int sind . Dies ist undefiniertes Verhalten, aber in der Praxis wird n als 1 initialisiert, wenn das Programm ohne zusätzliche Argumente ausgeführt wird. C enthält die unteren 32 Bits des Zeigers auf den Argumentvektor
Während der Bedingung
hält, werden wir den Körper der while- Schleife ausführen :
Um den Zustand vollständig zu verstehen, müssen wir zuerst den Körper untersuchen. Im
c=getchar()
Moment beobachten wir nur, dass ein einzelnes Byte aus STDIN (falls möglich) gelesen und in der Variablen c gespeichert wird .Die Bytesequenz Hallo sieht in verschiedenen Darstellungen wie folgt aus.
Alle diese fallen in den Bereich [96, 192) , so
c/96
wird bewerten 1 für jedes dieser Bytes und auf 0 für alle übrigen ASCII - Zeichen. Auf diese Weiseputchar(c)/96*c
( putchar druckt und gibt ihr Argument) wird bewerten , c , wenn c ist`
, ein Kleinbuchstabe, eine der{|}~
oder die DEL Zeichen; für alle anderen ASCII-Zeichen wird 0 ausgewertet .n wird aktualisiert, indem es um fünf Bits nach links verschoben wird und anschließend das Ergebnis mit dem Ergebnis aus dem vorherigen Absatz XOR-verknüpft wird. Da ein Int 32 Bit breit ist (oder wie in dieser Antwort angenommen), könnten einige der verschobenen Bits "von links fallen" (vorzeichenbehafteter Integer-Überlauf ist undefiniertes Verhalten, aber gcc verhält sich wie der hier erzeugte x64-Befehl). Ausgehend von einem unbekannten Wert von n erhalten wir nach der Aktualisierung für alle Zeichen von hallo das folgende Ergebnis.
Beachten Sie, dass die unteren 25 Bits die Ganzzahl 0xb33def bilden , die die magische Konstante in der Bedingung ist. Während es eine gewisse Überlappung zwischen den Bits zweier benachbarter Bytes gibt, stellt die Zuordnung von Bytes unter 96 zu 0 sicher, dass keine falsch positiven Ergebnisse vorliegen.
Die Bedingung besteht aus zwei Teilen:
~(getchar())
Nimmt das bitweise NICHT des Ergebnisses des Lesens (oder des Versuchs, ein Byte aus STDIN zu lesen).Wenn getchar erfolgreich ist, wird der Wert des gelesenen Bytes als int zurückgegeben . Da die Eingabe ausschließlich aus ASCII-Zeichen besteht, können für das gelesene Byte nur die unteren 7 Bits festgelegt werden. In diesem Fall werden für das bitweise NICHT die höchsten 25 Bits festgelegt.
Wenn getchar fehlschlägt (keine weitere Eingabe), wird -1 zurückgegeben und das bitweise NOT wird 0 sein .
n-0xb33def<<7
subtrahiert die magische Konstante von vorher von n und verschiebt das Ergebnis um 7 Einheiten nach links.Wenn die letzten 5 gelesenen Bytes Hallo waren , sind die niedrigsten 25 Bits von n gleich 0xb33def, und die Subtraktion setzt sie auf Null. Das Verschieben der Differenz ergibt 0, da die 7 höchsten Bits "nach links fallen".
Wenn andererseits die letzten 5 gelesenen Bytes nicht Hallo waren , wird eines der niedrigsten 25 Bits der Differenz gesetzt; Nach dem Verschieben wird eines der höchsten 25 Bits sein.
Wenn getchar erfolgreich war und wir noch kein Hallo ausgegeben haben , wird das bitweise UND gesetzt, das alle 25 höchsten Bits des linken Operanden und mindestens eines der 25 höchsten Bits des rechten Operanden enthält. Auf diese Weise
&
erhalten Sie eine Ganzzahl ungleich Null und die Schleife wird fortgesetzt.Wenn andererseits die Eingabe erschöpft ist oder wir bereits Hallo gedruckt haben , ist einer der bitweisen UND-Operanden Null, und das Ergebnis auch. In diesem Fall brechen wir aus der Schleife aus und das Programm wird beendet.
quelle
Bash,
747510399888276 Bytes-10 Bytes dank @DigitalTrauma!
-11 Bytes dank @manatwork!
-6 Bytes dank @Dennis!
Erläuterung:
Probieren Sie es online!
quelle
Labyrinth ,
4341 BytesDanke an Sp3000 für das Speichern von 2 Bytes.
Probieren Sie es online!
Erläuterung
Die Grundidee ist, die letzten fünf Zeichen in der Basis 256 in einer einzelnen Ganzzahl zu codieren. Wenn ein neues Zeichen eingeht, können wir es "anhängen", indem wir die ganze Zahl mit 256 multiplizieren und den neuen Codepunkt hinzufügen. Wenn wir nur die letzten 5 Zeichen betrachten wollen, nehmen wir den Wert modulo 256 5 = 2 40 = 1099511627776. Dann können wir einfach überprüfen, ob dieser Wert gleich 448378203247 ist, was wir erhalten, wenn wir die Codepunkte von behandeln
hello
als Base-256-Ziffern.Wie für den Code ...
<...>
ist ein bisschen ein Labyrinth-Idiom. Damit können Sie eine Endlosschleife ohne bedingten Kontrollfluss in eine einzelne Zeile schreiben und so viele Bytes in Leerzeichen und Zeilenvorschüben einsparen. Die Hauptbedingung dafür ist, dass sich auf dem Stapel zwei verfügbare Werte befinden, wenn wir den erreichen<
(normalerweise verwenden wir dafür0
s, aber der tatsächliche Wert ist willkürlich).Natürlich benötigt das Programm eine Bedingungslogik, um herauszufinden, wann es zu beenden ist. Das bedingte Beenden des Programms ist jedoch möglich, indem durch einen Wert von Null dividiert wird, wenn das Programm beendet werden soll. Das
<...>
Konstrukt verschiebt die gesamte Zeile (zyklisch) nach links, wenn sich die IP am linken Ende befindet, und verschiebt sie dann sofort wieder in ihre Position. Dies bedeutet, dass der Code tatsächlich von rechts nach links ausgeführt wird. Kehren wir es um:Dies ist eine Iteration der Schleife, die ein Zeichen liest, endet, wenn wir EOF erreicht haben, das Zeichen druckt, es zu unserer Codierung hinzufügt, das auf 5 Zeichen abschneidet, auf Gleichheit mit prüft
hello
und wiederholt. So funktioniert das im Detail (denken Sie daran, dass Labyrinth stapelbasiert ist):quelle
Brainfuck, 658 Bytes
Über 500 Bytes sind in den Konstanten, die ich ein bisschen Golf spielen muss.
Es ist im Wesentlichen eine Zustandsmaschine, sodass unendliche Eingaben kein Problem darstellen.
Dies ist die leicht kommentierte Version
quelle
ahehellob
richtig zu behandeln. In der Mitte eines möglichen Matches wird nur nach dem nächsten Buchstaben gesuchthello
und es wird nicht nach einemh
gesucht, der von vorne beginnen kann.Bash ,
736866 BytesNimmt ein Verzeichnis mit keinen oder nur versteckten Dateien an. Muss ausgeführt werden als
<path/to/script>
.Probieren Sie es online!
Wie es funktioniert (veraltet)
Zu Beginn der while- Schleife prüfen wir zunächst, ob die Zeichenfolge in der Variablen s (anfangs leer) gleich olleh ( hallo rückwärts, olé) ist, und geben dementsprechend 0 (Übereinstimmung) oder 1 (keine Übereinstimmung) zurück. Das Ergebnis ist zwar formal Teil der Schleifenbedingung, wirkt sich jedoch nicht auf diese aus, da nur der letzte Befehl davor
do
bestimmt, ob die Bedingung erfüllt ist.Als Nächstes setzen wir das interne Feldtrennzeichen auf die leere Zeichenfolge (sodass
read
Leerzeichen nicht-r
unterdrückt werden ), lesen unformatierte Bytes ( ) aus STDIN und speichern sie inc
.$?
ist der Exit-Code des vorherigen Befehls, der genau ein (-N1
) Byte für eine Nichtübereinstimmung und null Byte (-N0
) liest . Das Lesen von Null-Bytes, unabhängig davon, ob es auf EOF zurückzuführen ist oder-N0
angegeben wurde, führtread
zum Beenden mit Statuscode 1 , sodass die while-Schleife endet. Ansonsten wird der Körper ausgeführt und wir fangen von vorne an.Im Body drucken wir zuerst das gelesene Byte und aktualisieren dann s mit
s=$c${s::4}
. Dies stellt das gelesene Byte (bis zu) den ersten vier Bytes in s voran , so dass s gleich olleh ist, sobald hallo gedruckt wurde.quelle
Brainfuck, 117 Bytes
Formatiert:
Probieren Sie es online aus .
Dies initialisiert das Band mit den Charakteren in
hello
Offset durch107
, wobei ein Wert alle drei Zellen heraus gesperrt, hält dann in den letzten fünf Zeichen verfolgen gesehen und sucht nach einer Übereinstimmung mit jedem neuen Charakter verarbeitet, eine Flagge auf der rechten Seite der Zeichenfolge mit zu Verfolgen Sie, ob es eine Übereinstimmung gegeben hat.quelle
Ruby ,
4660 BytesProbieren Sie es online!
Liest Zeichen von stdin bis zu den letzten 5 und gibt
hello
dann die Zeichenkette aus (oder bis keine Zeichen mehr in stdin sind). Beendet mit Fehler.Gleichwertig:
Oder mehr ungolfed:
quelle
a
wächst jedes Mal, wenn ein Zeichen gelesen wird. Stürzt das ab, wenn die Eingabe unendlich ist?Python 3,
120116104 BytesFunktioniert mit unendlichen Bächen, das erste Mal Golfen, alle Tipps sind willkommen.
Danke @DJMcMayhem für das Speichern einiger Bytes :)
quelle
c=[0,c+1]['hello'[c]==a]
sollten Sie einige Bytes sparen. Aucha=1
ist auch kürzer.while
In Python wird die Klammer nicht benötigt .Haskell,
414743 BytesHaskells Faulheit bewältigt die unendlichen Ein- und Ausgänge gut.
Probieren Sie es online!
Bearbeiten: Endliche Eingabe nicht verarbeitet - behoben. Vielen Dank an @Leo für den Hinweis.
Edit II: @ Ørjan Johansen hat 4 Bytes gespeichert. Vielen Dank!
quelle
|w@"hello"<-take 5l=w
.Cubix,
94 83 82 79 6356 BytesErweitert:
Anmerkungen
Probieren Sie es online aus
Sie können das Programm hier ausprobieren .
Erläuterung
Grund Idee
Die allgemeine Idee ist, dass wir ein Zeichen lesen und es dann mit unterschiedlichen Zeichen vergleichen möchten (zuerst
h
, danne
,l
usw.). Um den Überblick über den vermissten Charakter zu behalten, halten wir ihn ganz unten im Stapel. Wenn wir es brauchen, können wir es leicht wieder nach oben bringen.Lese- / Schreibschleife
Die Schreib-Lese-Schleife ist einfach die 5 th Linie. Alle nicht verwendeten Zeichen werden durch no-ops (
.
) ersetzt:Dies kann in zwei Teile unterteilt werden: Lesen und (Schreiben und Prüfen). Der erste Teil enthält die Anweisungen bis einschließlich des Fragezeichens. Der zweite Teil ist der Rest der Linie. Da dies eine Schleife darstellt, gehen wir davon aus, dass wir mit einem Stapel von beginnen
[...]
Der zweite Teil (Schreiben und Prüfen) ist wieder linear. Der Stapel beginnt als
[next-char, ..., input]
. Wir haben das nächste Zeichen abstrahiert, weil sich das später im Programm ändert.Jetzt beginnt die IP wieder am Anfang dieser Schleife und setzt das nächste zu überprüfende Zeichen zurück
h
.Matching das nächste Zeichen
Wenn die IP eine Kehrtwende gemacht hat (dh das gelesene und gedruckte Zeichen stimmt mit dem nächsten Zeichen überein
'hello'
), müssen wir überprüfen, welches Zeichen die Eingabe war, und in Abhängigkeit davon das nächste Zeichen zum Ende des Stapels schieben. Danach müssen wir in die Lese- / Schreibschleife zurückkehren, ohneh
zum Stapel zu wechseln, also brauchen wir einen anderen Weg, um dorthin zu gelangen.Das Wichtigste zuerst: Bestimmen Sie, welches Zeichen die Eingabe war. Der Stapel sieht wie folgt aus :
[..., prev-char, input, 0]
.Um die Eingabe zu vergleichen, verwenden wir wieder den Zeichencode von
h
. Das lag anfangs daran, dass ich nicht genau wusste, wie ich damit umgehen sollte, undh
es war das erste Zeichen in der Zeichenfolge, nach dem gesucht werden musste, aber es erwies sich als recht praktisch. Wenn wir den Zeichencode von h von der Eingabe subtrahieren, erhalten wir,-3
ob die Eingabe iste
,0
ob die Eingabe isth
,4
ob die Eingabe istl
und7
ob die Eingabe isto
.Dies ist nützlich, da mit dem
?
Befehl negative Werte leicht von positiven Werten und Null getrennt werden können. Wenn sich die IP nach links dreht, war die Differenz negativ, die Eingabee
also, und das nächste Zeichen sollte ein seinl
. Wenn die IP weiter geradeaus geht, war der Unterschied0
, also war die Eingabeh
, also sollte das nächste Zeichen ein seine
. Wenn der Eingang einl
oder ein isto
, wird die IP nach rechts gedreht.Alle Anweisungen, die vor dem oben genannten Fragezeichen ausgeführt werden, sind:
Jetzt ändert die IP ihre Richtung wie oben beschrieben. Gehen wir die verschiedenen Möglichkeiten durch.
Eingang
'e'
Zuerst betrachten wir die Eingabe
e
, die bewirkt, dass sich die IP von der nach oben bewegt?
, da der Unterschied 3 beträgt. Alle irrelevanten Zeichen wurden aus dem Cube entfernt.Die Zeichen werden in dieser Reihenfolge ausgeführt (mit Ausnahme einiger Kontrollflusszeichen):
Jetzt hat die IP die Lese- / Schreibschleife wieder erreicht.
Eingang
'h'
Wenn die Eingabe war
'h'
, ist die Differenz 0, sodass die IP ihre Richtung nicht ändert. Hier ist noch einmal der Würfel, bei dem alle irrelevanten Zeichen entfernt sind. Da dieser Pfad einige No-Ops enthält, wurden alle übergebenen No-Ops durch ersetzt&
. Die IP beginnt am Fragezeichen.Die ausgeführten Anweisungen sind:
Und jetzt treten wir wieder in die Lese- / Schreibschleife ein, also sind wir fertig.
Andere Eingänge
Alle anderen Eingaben führen zu einer positiven Differenz, sodass die IP am Fragezeichen nach rechts wechselt. Wir müssen immer noch das
l
und das trenneno
, also werden wir das als nächstes tun.Trennen der
'l'
und'o'
Denken Sie daran, dass der Unterschied 7 für
o
und 4 für istl
und dass wir das Programm beenden müssen, wenn die Eingabe eine waro
. Hier ist noch einmal der Würfel, wobei die irrelevanten Teile durch a.
und die No-Ops durch Et-Zeichen ersetzt wurden.Unterscheidung zwischen den beiden
'l'
sJetzt wissen wir also, dass es sich um eine Eingabe handelte
l
, aber wir wissen nicht, welchel
. Wenn es der erste ist, müssen wir einen anderenl
auf den Boden des Stapels schieben , aber wenn es der zweite ist, müssen wir einen schiebeno
. Erinnerst du dich, dass wir-3
am Ende des Stapels gespeichert haben , kurz bevor wir den ersten gepusht habenl
? Damit können wir die beiden Zweige trennen.Der Stapel beginnt als
[..., -3 or 140, ...]
Zuerst
'l'
Wenn dies der erste war
'l'
, müssen wir einen anderen drängen'l'
. Um Bytes zu sparen, verwenden wir dieselben Zeichen wie für das erste'l'
. Wir können den Stack zu vereinfachen[...]
. Hier ist der relevante Teil des Cubes, bei dem No-Ops durch kaufmännisches Und ersetzt werden.Die folgenden Anweisungen werden ausgeführt:
Wir treten in die Lese- / Schreibschleife ein, also sind wir mit diesem Zweig fertig.
Zweite
'l'
Wenn die Eingabe der zweite war
'l'
in'hello'
wandte sich die IP - Recht auf das Fragezeichen. Wieder einmal können wir den Stack vereinfachen[...]
und die IP beginnt bei?
und zeigt diesmal nach Süden.Die ausgeführten Anweisungen sind:
Und die IP tritt gleich wieder in die Lese- / Schreibschleife ein, sodass wir auch mit diesem Zweig fertig sind.
quelle
C ++,
142141 BytesProbieren Sie es online!
quelle
#import
in GCC C ++ Programmen ...#import
ist eine veraltete GCC-Erweiterung.Knoten, 124 Bytes
Ich gehe nicht davon aus, dass der Stream in den verfügbaren Speicher passt.
quelle
C #, 134 Bytes
Probieren Sie es online
Liest ein Zeichen, überprüft, dass es nicht -1 (EOS) ist und dass wir "Hallo" noch nicht gesehen haben, stellt es dann einem String voran und schreibt das Zeichen aus. Wir stellen voran, weil
s[0]
es viel kürzer ist als(char)s
. Dies hat quadratische Kosten in der Länge des Strings zur Folge, da jedes Mal, wenn ein Zeichen gelesen wird, die gesamte Eingabe zugewiesen und durchsucht werden muss.Informationen zu einer (längeren: 142 Byte) Version, die nicht über genügend Speicher verfügt und konstante Kosten pro Zeichen aufweist, finden Sie unten:
Dieser hält die letzten 5 Zeichen in einer Zeichenfolge von 5 Längen, was kurze Vergleiche und eine billige Suche nach dem letzten Zeichen bedeutet, aber die Aktualisierung ist erheblich teurer.
quelle
PHP,
57 5553 BytesDa es keine unendlichen Dateien gibt, nehme ich Eingaben von STDIN entgegen. Laufen Sie mit
-nr
.Durchlaufen Sie die Eingabe, drucken Sie das aktuelle Zeichen, hängen Sie es an
$s
und schneiden Sie$s
die letzten 5 Zeichen ab. Schleife unterbrechen, wenn$s
isthello
.quelle
Vim, 39 Bytes
Probieren Sie es online!
quelle
PowerShell, 111 Byte
Es gibt wahrscheinlich einen besseren Weg, dies zu tun, aber ich kann es im Moment nicht sehen.
Dies liest die Tastenanschläge, ohne das Echo zu unterdrücken. Das Zeichen wird zu $ x hinzugefügt, das auf die letzten 5 Zeichen gekürzt und mit "Hallo" verglichen wird. Dies geht so lange weiter, bis der Vergleich wahr ist.
Hinweis: Dies funktioniert in PowerShell ISE nicht. ReadKey ist in dieser Umgebung deaktiviert.
quelle
Schema 115 Bytes
Lesbare Version:
Dies nimmt jedes Mal ein einzelnes Zeichen von stdin in der Schleife und markiert seine Position auf dem Zielwort, wenn es auf die Zeichen von "hallo" trifft.
Stoppt, wenn die Eingabe erschöpft ist oder "Hallo" gesehen wurde. Kein Speicher für unendlichen Stream.
quelle
AWK, 95 Bytes
Es gibt 2 Dinge , die ich hier gelernt:
1) Datensätze aufgeteilt zwischen den Zeichen verwenden
RS="(.)"
und dannRT
muss statt verwendet wird$1
2)
ORS
verwendet wird , durchprint
und ist voreingestellt auf"\n"
3) I nicht auf 2 zählen kann und die Verwendung
printf
ist „billiger“ als die ZuordnungORS
und mitprint
Anwendungsbeispiel: Code in DATEI einfügen
oder
Code wurde mit Dennis '
yes | ...
Vorschlag getestet und ich sah viele, vieley
s.Zu Ihrer Information, Sie können die RS-Zuweisung optional durchführen und sie aus dem
BEGIN
Block herausziehen über:quelle
BEGIN{RS="(.)"}{printf RT}"olleh"==a=RT substr(a,1,4){exit}
.Python 3 (Linux),
73 -72 ByteVielen Dank an @MitchSchwartz für das Golfen ab 1 Byte!
Probieren Sie es online!
quelle
while
richtig bewertet? Es sieht so aus, als würden Sie einen Booleschen Wert mit einem leeren String vergleichen.s[print(end=c):4]
speichert ein Byte'olleh'!=s and s>''and''<c)
. Der mittlere Test wird nicht benötigt, aber das Verketten ist kürzer als der einfache'olleh'!=s and''<c
.8086 Maschinencode, 22 Bytes
Äquivalenter Montagecode:
quelle
Pyth,
4947 BytesPyth ist nicht sehr gut darin, einen einzelnen Buchstaben einer Eingabe zu nehmen. Alles in
$__import__("sys").stdin.read(1)
macht das einfach. Dies bedeutet auch, dass dies nur offline ausgeführt wird.Alles andere ist kurz ...
Das Programm ist eine körperlose while-Schleife. Innerhalb der Bedingung liest das Programm ein Zeichen, druckt es zurück, fügt dieses Zeichen an
k
(das anfangs die leere Zeichenfolge ist) , schneidet alle Zeichen bis auf die letzten 5 abk
und prüft dann, ob das Ergebnis nicht stimmt"hello"
.32 Zeichen erhalten ein Byte, den Rest erledigen 15 Zeichen.
Getestet unter Linux, funktioniert auch ohne Zeilenvorschub, unendliche Eingabe usw.
quelle
Lua,
6864 Bytesquelle
l:sub(-4)
, dann können Sie die Initialisierung von reduzierenl=""
.Ruby,
59494843 BytesJetzt rastlos, kürzer und ohne Speicherverlust.
5 Bytes gespart, indem dank Dennis einige Klammern und ein Leerzeichen entfernt wurden
quelle
Röda ,
4947 BytesProbieren Sie es online!
Dies ist eine anonyme Funktion, die Zeichen aus ihrem Eingabestream liest und ausgibt, bis "Hallo" gefunden wird. Es verwendet das Array
a
, um die letzten Zeichen zu verfolgen.Es gibt etwas Müll an STDERR aus, aber ich habe verstanden, dass das erlaubt ist .
Erläuterung:
quelle
Java 7,
122118124123150141 BytesJetzt hört auf, wenn das Ende des Streams erreicht ist. Verarbeitet jetzt unendliche Eingaben, ohne dass der Arbeitsspeicher knapp wird.
quelle
write
dass stattdessen verwendet wirdprint
. Ich kann meine Ablehnung nicht rückgängig machen, sorry dafür :(Ruby, 51 Bytes
quelle
AHK , 116 Bytes
Da drin ist nichts Schlaues oder Magisches. Die Variable
%1%
ist das erste übergebene Argument und sollte ein Dateipfad mit dem Stream sein. Die Datei muss beim Aktualisieren gespeichert werden, der Code wird jedoch bis zum Ende gelesen, auch wenn er nach dem Beginn des Lesens erweitert wird.quelle
Mathematica, 107 Bytes
Die Ausgabe wird zu einem Feld, in das der Benutzer unbegrenzt Text (einschließlich Zeilenumbrüche) eingeben kann, bis die letzten 5 Zeichen gleich sind
"hello"
. An diesem Punkt wird es beendet.quelle
Brainfuck , 281 Bytes
Ich bin mir nicht sicher warum, aber ich hatte einfach das Gefühl, dass Brainfuck das Richtige ist, um dies zu tun. Benötigt keinen unendlichen Speicher und kann für immer ausgegeben werden.
Erklärt
Probieren Sie es online!
quelle
ahehellob
.