PPCG hat noch nicht genug von Quines ...
Herausforderung:
Ihre Aufgabe ist es, ein Programm "A0" zu erstellen. Wenn dieses Programm ohne Eingabe ausgeführt wird, gibt es nichts aus. Wenn dieses Programm mit Eingabe ausgeführt wird, gibt es "A1" aus. Wenn "A1" ohne Eingabe ausgeführt wird, wird "A0" ausgegeben. Wenn "A1" mit Eingang ausgeführt wird, wird "A2" ausgegeben. Ziemlich genau, "A (k)" gibt "A (k-1)" aus, wenn es ohne Eingabe ausgeführt wird, und gibt "A (k + 1)" aus, wenn es mit Eingabe ausgeführt wird.
Einzelheiten
Ich glaube, diese Herausforderung ist einfach genug. Es gibt wirklich keine anderen Regeln. Jedes Programm muss übrigens mindestens 1 Byte enthalten. Sie können davon ausgehen, dass die Eingabe nur aus ASCII-Zeichen besteht, und Sie können Leerzeichen ignorieren, wenn Sie möchten, aber Sie können keine bestimmte Eingabe angeben. Die Ausgabe kann entweder auf STDOUT oder STDERR erfolgen, aber alle Ihre Programme müssen auf dieselbe Ausgabe erfolgen. Der andere kann auch Text enthalten (Sie können also an STDOUT ausgeben und dann mit einem Fehler beenden). Vielen Dank an @Dennis für den Hinweis.
Alle Programme müssen in derselben Sprache verfasst sein und jedes Programm muss sich von den anderen unterscheiden.
Die Punktzahl entspricht der Länge des Programms "A0". Da dies eine Code-Golf-Herausforderung ist, gewinnt die niedrigste Punktzahl!
Antworten:
Pip , 28 Bytes
Probieren Sie es online aus!
Erläuterung
Dies ist eine modifizierte Version des kürzesten bekannten Pip Quine
V Y"`V Y`.RPy"
. Diese Quine definiert einen String, zieht ihn in diey
Variable und wertet ihn dann aus. Bei der Auswertung nimmt die Zeichenfolge den Repr vony
(wodurch der Wert vony
in doppelte Anführungszeichen gesetzt wird) und verkettet das Musterliteral`V Y`
an die Vorderseite.Unsere Strategie ist es ein setzen
0
in dem Programm, dann ersetzen0
mit ,10
wenn es eingegeben wurde, oder ersetzen Sie10
mit ,0
wenn es keine Eingabe. (Also A ( k ) eine Nummer enthalten , die aus k 1 ist durch ein 0 gefolgt)0
und10
sind bequem , weil es ist integrierte Variablen (i
undt
ist) mit diesen Werten, so dass wir sie ohne tatsächliche Ziffern beziehen können mit .Also
RPy
wollen wir stattdessen ,RP yRit
ob es Eingaben gab undRP yRti
wenn nicht. Wir können die beiden Fälle kombinieren, indem wir die Werte von austauschent
undi
wenn input (I#q Sti
) vorhanden ist, dann tunRP yRti
. (Wir müssen#q
die Länge der Eingabe testen , da Eingaben wie0
Falsey sind.)Jetzt müssen wir nur noch ein Literal
0
in den Code einfügen und den Sonderfall von A0 behandeln, der keine Ausgabe erzeugt. Beides kann durch Testen0+i
und Zurückgeben gelöst werden,u
wenn es sich um eine False handelt:110+i
. B. ).i
undt
getauscht wird undi
100+i
ist, ist das immer noch wahr.i
ist immer noch 0 und0+i
ist falsch. Anstelle des Quine-Kerns geben wir ausu
, eine integrierte Variable für nil. Das Drucken von Null erzeugt keine Ausgabe.quelle
Python 2, 93 Bytes
Es gibt einen nachlaufenden Zeilenvorschub.
Versuchen Sie es mit Eingabe | Versuchen Sie es ohne Eingabe
Dies wurde von meiner Antwort auf eine ähnliche Frage geändert .
Wenn eine Eingabe vorhanden ist, wird diese erhöht
p
. So das resultierende Programm wirdp=2+...
,p=3+...
usw.quelle
input()
Eingaben verwenden und verlangen, dass sie von Anführungszeichen umgeben sind, anstatt sie zu verwendenraw_input()
. Wenn Sie Null eingeben möchten, verwenden Sie"0"
.