Herausforderung:
Erstellen Sie ein Programm oder eine Funktion, die eine ganzzahlige Eingabe akzeptiert und ein neues Programm / eine neue Funktion wie unten angegeben ausgibt.
Eingang:
Ganzzahl n
: Zeit in Sekunden, bevor die Zeitbombe explodiert.
Ausgabe:
Das ursprüngliche Programm, das die Zeit in Sekunden n
als Eingabe hatte, gibt ein neues Programm / eine neue Funktion aus, die Folgendes ausführt:
- Sind
n
Sekunden vergangen, seit das vorherige Programm ausgeführt wurde? DruckenBOOM!
- Sonst: Drucken Sie ein Programm / eine Funktion, die, wenn sie selbst ausgeführt wird, den Timer auf
n
Sekunden zurücksetzt (und sich wie das erste ausgegebene Programm / die erste ausgegebene Funktion verhält).
HINWEIS: Es ist nicht genau dasselbe wie das erste ausgegebene Programm / die erste ausgegebene Funktion (zumindest in den meisten Sprachen), da sich die Startzeit geändert hat (siehe Erläuterungsbeispiel unten).
Pseudocode Beispiel:
Angenommen, das ursprüngliche Programm ist ABC
und die Eingabe ist 60
Sekunden:
ABC
& 60
Ausgänge DEF(60)
.
- Wenn
DEF(60)
es innerhalb von 60 Sekunden ausgeführt wird, wird es ausgegebenDEF_G(60)
, was genau so funktioniertDEF(60)
, jedoch mit einer neuen Startzeit. - Wenn
DEF(60)
es nach 60 Sekunden ausgeführt wird, wird es ausgegebenBOOM!
.
Klärungsbeispiel, was ich mit "Startzeit" meine:
- Das Basisprogramm mit den eingegebenen
60
Sekunden wird um ausgeführt12:00:00
. Es gibt das erste Ausgabeprogramm mit einer Startzeit von aus12:00:00
. - Dieses erste Ausgabeprogramm mit Startzeit von
12:00:00
wird um ausgeführt12:00:45
. Es gibt ein zweites Ausgabeprogramm mit einer Startzeit von aus12:00:45
. - Dieses dritte Ausgabeprogramm mit einer Startzeit von
12:00:45
wird ausgeführt12:01:25
. Es gibt ein viertes Ausgabeprogramm mit einer Startzeit von aus12:01:25
. - Dieses vierte Ausgabeprogramm mit einer Startzeit von
12:01:25
wird ausgeführt12:05:00
. Es wird ausgegebenBOOM!
.
Beachten Sie, wie der erste Ausgang würde Druck BOOM!
nach 12:01:00
, aber das Ausgabeprogramm so auch Fortschritte gemacht hat , obwohl es 12:01:25
in Schritt 3, wird es noch geben das nächste Programm statt BOOM!
(weil die Ausgangs-of-Ausgabeprogramme hat mal über diese erste Ausgabe Programmstart) .
Herausforderungsregeln:
- Es gelten die Standardregeln für Quine.
- Es sollten mindestens
n
Sekunden vergangen sein. Wenn also die Eingabe ist60
und die Startzeit war12:00:00
,12:01:00
wird das v2-Programm weiterhin ausgegeben, aber12:01:01
ausgegebenBOOM!
. - Die Ausgabeprogramme nehmen keine Eingabe entgegen ( außer einem leeren, nicht verwendeten Parameter, wenn dieser kürzer ist ). Die Startzeit sollte für die nächsten Programme als "fest codierter" Wert angegeben werden (weshalb die Ausgabe eines Ausgabeprogramms nicht genau mit der vorherigen übereinstimmt (in den meisten Sprachen).
- Nur die Größe Ihres Hauptprogramms / Ihrer Hauptfunktion wird in Bytes gezählt.
- Sie können das Programm / die Funktion entweder als Zeichenfolge (oder als vergleichbares vernünftiges Format wie Byte / Zeichenarray / Liste), als Funktion, wenn Ihre Sprache dies unterstützt, oder als andere vernünftige Formate ausgeben (bitte fragen Sie, wenn Sie sich nicht sicher sind).
Allgemeine Regeln:
- Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich nicht von Code-Golf-Sprachen davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, eine möglichst kurze Antwort für "jede" Programmiersprache zu finden. - Für Ihre Antwort gelten Standardregeln , sodass Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden dürfen. Ihr Anruf.
- Standardschlupflöcher sind verboten.
- Wenn möglich, fügen Sie bitte einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie bei Bedarf auch eine Erklärung hinzu.
Antworten:
JavaScript, 51 Bytes
Im Browser testen
alte Version
Im Browser testen
quelle
return()=>
. Und obwohl ich fast nie in JavaScript programmiere, habe ich Ihr Testskript überprüft und es sogar geändert, indem ich einen Test für die Funktion der Funktionsausgabe hinzugefügt habe: Testen Sie es hier mit dem vierten Funktionstest. Alles scheint zu funktionieren, und es ist überraschend kurz, könnte ich hinzufügen, also +1 von mir. PS: In den Regeln wurde angegeben, dass anstelle einer Funktion eine Zeichenfolge ausgegeben werden soll. Aber ich werde die Regeln ein wenig ändern, um beides zuzulassen. Könnten Sie das Skript möglicherweise so ändern, dass es auch die Funktionen ausgibt, die während des Tests protokolliert werden sollen?f=(t,o=setTimeout(_=>o=0,t*1e3))=>_=>o?f(t):'BOOM!'
sollte funktionierenJavaScript, 53 Bytes
Code-Snippet anzeigen
Alte Antwort (Rückgabe sollte eine Zeichenfolge sein)
JavaScript, 78 Bytes
Code-Snippet anzeigen
quelle
Java 8, 234 Bytes
Es tut mir leid, meine eigene Herausforderung sofort zu posten. Es ist hauptsächlich als weitere Klarstellung der Herausforderung gedacht, und ich bezweifelte, ob ich es der Frage selbst hinzufügen oder als Antwort veröffentlichen sollte (und entschied mich, es als Antwort zu veröffentlichen, um den Herausforderungsbeitrag nicht zu überladen).
Und obwohl ich sagen möchte, dass es auch etwas zu (versuchen und) zu schlagen ist, ist das nicht einmal erwähnenswert, weil Java (fast) immer geschlagen wird. ; p
Probieren Sie es online aus.
Beispielausgabe:
Probieren Sie hier die ausgegebene Lambda-Funktion aus.
Beispielausgabe:
Erläuterung:
Die Hauptfunktion nimmt eine Ganzzahl-Eingabe und gibt einen String zurück. Grundsätzlich wird eine Funktion zurückgegeben, bei der es sich um eine Quine handelt, bei der die Ganzzahl eingegeben und die Startzeit (in Sekunden als Zeitstempel) als fest codierte Werte angegeben werden.
Hauptfunktion:
n=60
wurde in den folgenden Beispielen verwendet:Erstes Ausgabeprogramm:
Zweites Ausgabeprogramm:
Das gleiche wie das erste Ausgabeprogramm, außer dass
70492.687613232
es durch ersetzt wird70548
.quelle
Perl 5 +
-p
, 88 BytesAusgabeprogramme müssen mit
-M5.010
for ausgeführt werdensay
, jedoch nicht-p
.Probieren Sie es online aus!
quelle
05AB1E , 50 Bytes
Kann definitiv ein bisschen mehr Golf gespielt werden, aber es ist ziemlich schwierig, ein Semi-Quine auszugeben, das ein Quine-Programm mit modifizierten Werten ausgibt.
Probieren Sie es online aus oder versuchen Sie es mit einem 20-Sekunden-Beispiellauf .
Erläuterung:
Beispiel resultierendes Programm:
Welches basiert auf dem Standard Quine :
"34çìD«"34çìD«
.Sehen Sie diese 05AB1E Spitze von mir (Abschnitt Wie das Wörterbuch benutzen? ) Zu verstehen , warum
‘ÒÞ!
ist"BOOM!"
.HINWEIS: Der Grund, warum das Leerzeichen dazwischen steht,
çì
liegt darin, dass estriumph
aufgrund des’...’
.quelle