Schreiben Sie ein Programm, das eine "true" -Ausgabe generiert, wenn die Eingabe mit dem Quellcode des Programms übereinstimmt, und das eine "false" -Ausgabe generiert, wenn die Eingabe nicht mit dem Quellcode des Programms übereinstimmt.
Dieses Problem kann als mit Quines verbunden beschrieben werden, da das Programm in der Lage sein muss, seinen eigenen Quellcode zu berechnen.
Dies ist Code Golf: Es gelten die Standardregeln. Ihr Programm darf nicht auf spezielle Dateien zugreifen, z. B. auf die Datei seines eigenen Quellcodes.
Bearbeiten: Wenn Sie dies wünschen, kann true / false durch true / false oder 1/0 ersetzt werden.
Beispiel
Wenn der Quellcode Ihres Programms ist bhiofvewoibh46948732));:/)4
, dann ist hier, was Ihr Programm tun muss:
Eingang (Stdin)
bhiofvewoibh46948732));:/)4
Ausgang (Stdout)
true
Eingang
(Anything other than your source code)
Ausgabe
false
code-golf
quine
decision-problem
PhiNotPi
quelle
quelle
true
/false
Ausgabe eine starke Anforderung oder sind auch Variationen (True
/False
,1
/0
) akzeptabel?Antworten:
JavaScript: 26
Ich weiß nicht, ob eine JavaScript-Datei wirklich als "Programm" qualifiziert ist.
quelle
.toString()
Methode in JavaScript haben .f=s=>s=='f='+f
JavaScript ES6, 9 Zeichen
Dies ist die einzige (golferische) Möglichkeit, dies in JS zu tun. ES6 macht es einfach super weniger Zeichen
Führen Sie dies in der neuesten Firefox-Webkonsole aus:
Anwendungsbeispiel:
quelle
f=x=>f==x
und nichtx=>f==x
, während die Version von Denys Séguret tatsächlich die gesamte Quelle überprüft.f=x=>f==x
function f()
f.toSource()
"x=>f==x"
(Grundsätzlich den Code in der Konsole auswerten und dannf.toSource()
in einem Browser auswerten , der diese Methode unterstützt.x=>f==x
) BEARBEITEN: egal, f wird innerhalb der Funktion referenziertHaskell, 72 Zeichen
Hinweis: Am Ende des Skripts befindet sich kein Zeilenendezeichen.
quelle
GolfScript, 11 Zeichen
Ohne das
=
wäre dieser Code ein Quine, der seinen eigenen Quellcode als String generiert. Das=
macht es diese Zeichenfolge an seinem Eingang und Ausgang vergleichen ,1
wenn sie übereinstimmen und0
wenn sie es nicht tun. Beachten Sie, dass der Vergleich genau ist. Insbesondere ein Zeilenumbruch am Ende der Eingabe führt dazu, dass der Vergleich fehlschlägt.Erläuterung:
{ }
ist ein Codeblockliteral in GolfScript;.
dupliziert diesen Codeblock und~
führt die zweite Kopie aus (wobei die erste auf dem Stapel verbleibt);`
stringifiziert den Codeblock und".~"
hängt + daran.~
an;=
vergleicht abschließend die resultierende Zeichenfolge mit der Eingabe (die vom GolfScript-Interpreter vor dem Programmstart als Zeichenfolge auf dem Stapel abgelegt wird) und gibt zurück,1
ob sie übereinstimmen und0
nicht.quelle
Perl,
Infinity4138 ZeichenUpdate: Das Programm endet nicht mehr mit einem Zeilenumbruch, was bedeutet, dass es bei mehrzeiligen Dateien korrekt funktioniert. Sie müssen die Eingabe von STDIN eingeben, ohne die Eingabetaste zu drücken. Unter Windows konnte ich dies nur durch Lesen aus einer Datei tun.
Ursprüngliche Lösung:
quelle
(cat id.pl; echo foo)|perl id.pl
> <> 68 Bytes
Fische lieben es, Fischkacke zu essen. Jetzt wissen wir, dass sie sich von ihren Freunden unterscheiden können.
Sie können es online ausprobieren !
quelle
1
für jedes Präfix des Codes ausgegebenPython 2, 55
Geprüft:
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
->True
(anything else)
->False
quelle
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
.raw_input()
durch__import__('sys').stdin.read()
.print raw_input()==open(__file__).read()
? Es ist nur 40 Bytes, verwendet Ihrenraw_input()
Ansatz, liest aber seinen Code.Your program must not access any special files, such as the file of its own source code.
JavaScript ES6,
1614 BytesMinus zwei Bytes dank Neil.
31 Bytes, wenn die Eingabe per Eingabeaufforderung erfolgen muss.
38 Bytes, wenn wir per Alert ausgeben müssen.
Dies ist der richtige Weg, da die Antwort des Optimierers nicht den gesamten Quellcode akzeptiert.
quelle
'$='+$
.;$()
weil der Funktionsaufruf Teil des Quine ist. Dies bedeutet auch, dass Sie zu wechseln müssen, um dieprompt
Eingabe zu berücksichtigen.$=_=>prompt()==`$=${$};$()`;$()
Node.js: 54
Sie testen es, indem Sie es in einer Datei speichern
f.js
(der genaue Name hat keine Bedeutung) und verwenden(was falsch ausgibt) oder
(welche Ausgabe ist wahr)
Ich habe auch eine andere Version basierend auf eval gemacht:
Es ist jetzt bei 72 Zeichen, ich werde versuchen, das zu verkürzen, wenn ich Zeit habe.
quelle
Smalltalk (Pharo 2.0 Dialekt)
Implementieren Sie diese 41- Zeichen-Methode in String (hässliche Formatierung für Code-Golf):
Bewerten Sie dies dann in einem Arbeitsbereich (printIt nach traditioneller Smalltalk-Methode).
Die Eingabe wird nicht von stdin gelesen, sondern ist nur ein String, an den wir die Nachricht senden (was könnte ein anderes Programm in Smalltalk sein?):
Aber wir betrügen, SourceCode liest eine Quelldatei ...
Hier ist eine Variante mit 51 Zeichen, die dies nicht tut:
Und teste mit:
Wenn eine Zeichenfolge in einem Arbeitsbereich nicht als gültige Eingabe betrachtet wird, sehen wir uns an, wie ein Dialogfeld in 116 Zeichen verwendet wird.
Bewerten Sie einfach diesen Satz:
Da das Dekompilierungsformat CR und TAB enthält, ändern wir dies mit SeparatorsCompacted.
Dann überspringen wir die ersten 7 Zeichen sind 'doIt ^'
Endlich eine 105- Zeichen-Variante mit stdin, interpretiere diesen Satz einfach von der Kommandozeile aus, um dich mehr im Mainstream zu fühlen:
quelle
flex - 312 Zeichen
Kann wahrscheinlich kürzer gemacht werden, funktioniert aber mit mehrzeiliger Eingabe (erforderlich, da der Quellcode aus mehreren Zeilen besteht) und sogar für Eingaben, die das Programm als Teilzeichenfolge enthalten. Es scheint, dass viele der bisherigen Antworten bei einem oder beiden fehlschlagen.
Kompilierbefehl:
flex id.l && gcc -lfl lex.yy.c
quelle
D (133 Zeichen)
quelle
JavaScript (V8), 35
rufen Sie an
i()
und es wird zur Eingabe aufgefordertquelle
+[]
sollte optional sein, da JS es automatischGolfScript - 26
Inspiriert von http://esolangs.org/wiki/GolfScript#Examples
Andere Version:
Schade, dass
\
das Tauschen und Entkommen ist ...quelle
Python 2, 47 Bytes
Ein einfaches Quine mit dem hinzugefügten Scheck.
quelle
print
ist eine Funktion ist Python 3. Sie müssten es tunprint(_%%_==input())';print(_%_==input())
oder in Python 2 ändern.CJam , 12 Bytes
Probieren Sie es online!
Erläuterung
Dies verwendet nur das Standard-CJam-Quine-Framework.
Was der Block macht:
quelle
Tcl, 111 Zeichen
quelle
Perl, 52 char
quelle
Python, 187 Bytes
Achten Sie darauf, dass Sie am Ende keine Zeilenumbrüche einfügen. Jemand mit besserem Python-fu könnte es verkürzen.
quelle
C=chr
, um mehrere Bytes zu löschen. Kürzen Sie auch den Variablennamencode
.Schale , 11 Bytes
Probieren Sie es online!
Erläuterung
Die Erklärung dient
¨
zum Abgrenzen von Zeichenfolgen (um unlesbare Escapezeichen zu vermeiden):Durch Entfernen der Funktion können
=
Sie überprüfen, ob sie tatsächlich nur mit der Quelle selbst übereinstimmt.quelle
> <> 24 Bytes
Probieren Sie es online!
Wrapping-String-Literal, gefolgt von der Überprüfung, ob die Eingabe mit dem Stack identisch ist, und der endgültigen Überprüfung, ob keine Eingabe mehr vorhanden ist.
quelle
Gelee , 10 Bytes
Probieren Sie es online!
quelle
05AB1E , 15 Bytes
Modifiziert das Standard - quine
0"D34çý"D34çý
durch HinzufügenQ
(für die Gleichstellung mit der impliziten Eingabe prüfen)Probieren Sie es online aus.
Erläuterung:
Coole 15- Byte- Alternative von @Grimy :
Probieren Sie es online aus.
Erläuterung:
quelle
187745012D27BJQ
ist ein Unentschieden.C -
186176 ZeichenEinzeiler:
Mit Leerzeichen (beachten Sie, dass dies das Programm bricht):
quelle
Python 2 , 40 Bytes
Probieren Sie es online!
quelle
Stax , 26 Bytes
Führen Sie es aus und debuggen Sie es
quelle
q, 8 Bytes
Gibt bei Eingaben, die mit den selbstreferenzierenden .zs übereinstimmen, einen booleschen Wert zurück
quelle
Runen , 11 Bytes
Probieren Sie es online!
TIO wurde aktualisiert und es gibt kein Problem mehr beim Lesen von Eingaben (und es ist kein abschließendes Leerzeichen mehr erforderlich).
Erläuterung
JoKings Lösung:
Erläuterung
quelle
r
Gegenteil"
linke das einzige ist, an das es wirklich gehen kann, weil es woanders kompliziert ist. (Aber gerade musste ich es in meinem Debugger ausführen, um zu sehen, was es tat ...)R , 54 Bytes
Probieren Sie es online!
body
Ruft den Rumpf der Funktion ab (ein bisschen aufteilen, so dassbody(f)[3]
ist alles vonpaste0
Anfang an möglich). Interessanterweise wirdbody
der Code neu formatiert, Leerzeichen nach Kommas usw. hinzugefügt. Dies ist daher ein seltener Fall einer R-Golf-Antwort mit einem Leerzeichen nach einem Komma.Dies funktioniert, da
body(f)
es sich um ein Objekt vom Typlanguage
handelt undas.character
für diesen Typ eine Methode vorhanden ist. Andererseits sindf
undargs(f)
vom Typclosure
und können, soweit ich das beurteilen kann, nicht in einen Zeichentyp konvertiert werden. Bitte fragen Sie mich nicht, wofür der Sprachtyp ist ...quelle
PowerShell, 28 Byte
Sehr ähnlich zu dieser JavaScript-Antwort , verwendet Funktionsanbieter .
Beispiel
quelle